diff --git a/proto/policy.proto b/proto/policy.proto
index 9e686f180994be988543ebd9a26dfd31dffed007..c093eb17a67c2b3ff7bfa690ddd639632ae67511 100644
--- a/proto/policy.proto
+++ b/proto/policy.proto
@@ -55,7 +55,7 @@ message PolicyRuleState {
 // Basic policy rule attributes
 message PolicyRuleBasic {
   PolicyRuleId policyRuleId = 1;
-  optional PolicyRuleState policyRuleState = 2;
+  PolicyRuleState policyRuleState = 2; //policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
   uint32 priority = 3;
 
   // Event-Condition-Action (ECA) model
diff --git a/proto/uml/pathcomp.png b/proto/uml/pathcomp.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd14fe5235febb43b24ffc52291696edc65c4e99
Binary files /dev/null and b/proto/uml/pathcomp.png differ
diff --git a/proto/uml/policy.png b/proto/uml/policy.png
index adbebe89f657a77d40b3ddf8cec95a93951deaf0..845a1e883223d7588ab20afabf559067cdc27454 100644
Binary files a/proto/uml/policy.png and b/proto/uml/policy.png differ
diff --git a/src/automation/pom.xml b/src/automation/pom.xml
index bedee7b7f23296fa4adb7585191d19b5a917d689..4609c2c8db9aae825a86e3820efa9c00a9d737f0 100644
--- a/src/automation/pom.xml
+++ b/src/automation/pom.xml
@@ -297,6 +297,7 @@
             <exclude>device/*</exclude>
             <exclude>monitoring/*</exclude>
             <exclude>kpi_sample_types/*</exclude>
+            <exclude>acl/*</exclude>
           </excludes>
           </configuration>
           <executions>
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 7a68965bf96a2c827219f761f19ba752dd534ffc..72ab633aff296765f3a03ade814cff05b5235dfd 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
@@ -18,7 +18,7 @@ package eu.teraflow.automation;
 
 import automation.Automation;
 import context.ContextOuterClass;
-import eu.teraflow.automation.device.model.Device;
+import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.model.DeviceRoleId;
 import io.quarkus.grpc.GrpcService;
 import io.smallrye.mutiny.Uni;
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 9e8927d583ce34cb8bfa0eaa7ba5561981b8dac7..5c8e95a442d7f6134b6817d144ff2ad646d2b5c3 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
@@ -16,7 +16,7 @@
 
 package eu.teraflow.automation;
 
-import eu.teraflow.automation.device.model.Device;
+import eu.teraflow.automation.context.model.Device;
 import io.smallrye.mutiny.Uni;
 
 public interface AutomationService {
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 3db0d647ebc5c2341337bcb5d91484af8684dfe6..13e56645384938b4eff42aa73ca9e8a5ff73a1bd 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
@@ -17,8 +17,8 @@
 package eu.teraflow.automation;
 
 import eu.teraflow.automation.context.ContextService;
+import eu.teraflow.automation.context.model.Device;
 import eu.teraflow.automation.device.DeviceService;
-import eu.teraflow.automation.device.model.Device;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
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 78f251439979fff73112e7a77af507d25b9b2dca..4dd09b55dc7a67287a84daafaaf4feb0ae190c6e 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/Serializer.java
@@ -16,24 +16,49 @@
 
 package eu.teraflow.automation;
 
+import acl.Acl;
 import automation.Automation;
 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.Uuid;
+import eu.teraflow.automation.acl.AclAction;
+import eu.teraflow.automation.acl.AclEntry;
+import eu.teraflow.automation.acl.AclForwardActionEnum;
+import eu.teraflow.automation.acl.AclLogActionEnum;
+import eu.teraflow.automation.acl.AclMatch;
+import eu.teraflow.automation.acl.AclRuleSet;
+import eu.teraflow.automation.acl.AclRuleTypeEnum;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleAcl;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+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.DeviceEvent;
+import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceEvent;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.GpsPosition;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeGpsPosition;
+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.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
 import java.util.stream.Collectors;
 import javax.inject.Singleton;
+import kpi_sample_types.KpiSampleTypes;
 
 @Singleton
 public class Serializer {
@@ -153,18 +178,32 @@ public class Serializer {
         }
     }
 
+    public ContextOuterClass.Timestamp serialize(double timestamp) {
+        final var builder = ContextOuterClass.Timestamp.newBuilder();
+
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public double deserialize(ContextOuterClass.Timestamp serializedTimeStamp) {
+
+        return serializedTimeStamp.getTimestamp();
+    }
+
     public ContextOuterClass.Event serialize(Event event) {
         final var builder = ContextOuterClass.Event.newBuilder();
 
         final var eventType = serialize(event.getEventTypeEnum());
+        final var timestamp = serialize(event.getTimestamp());
         builder.setEventType(eventType);
-        builder.setTimestamp(event.getTimestamp());
+        builder.setTimestamp(timestamp);
 
         return builder.build();
     }
 
     public Event deserialize(ContextOuterClass.Event serializedEvent) {
-        final var timestamp = serializedEvent.getTimestamp();
+        final var timestamp = deserialize(serializedEvent.getTimestamp());
         final var eventType = deserialize(serializedEvent.getEventType());
 
         return new Event(timestamp, eventType);
@@ -213,21 +252,406 @@ public class Serializer {
         }
     }
 
+    public ContextId serializeContextId(String expectedContextId) {
+        final var builder = ContextId.newBuilder();
+        final var uuid = serializeUuid(expectedContextId);
+
+        builder.setContextUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(ContextId contextId) {
+        return contextId.getContextUuid().getUuid();
+    }
+
+    public ContextOuterClass.TopologyId serialize(TopologyId topologyId) {
+        final var builder = ContextOuterClass.TopologyId.newBuilder();
+
+        final var topologyIdContextId = topologyId.getContextId();
+        final var topologyIdId = topologyId.getId();
+
+        final var contextId = serializeContextId(topologyIdContextId);
+        final var topologyIdIdUuid = serializeUuid(topologyIdId);
+
+        builder.setContextId(contextId);
+        builder.setTopologyUuid(topologyIdIdUuid);
+
+        return builder.build();
+    }
+
+    public TopologyId deserialize(ContextOuterClass.TopologyId topologyId) {
+        final var topologyIdContextId = deserialize(topologyId.getContextId());
+        final var topologyIdId = deserialize(topologyId.getTopologyUuid());
+
+        return new TopologyId(topologyIdContextId, topologyIdId);
+    }
+
+    public ContextOuterClass.EndPointId serialize(EndPointId endPointId) {
+        final var builder = ContextOuterClass.EndPointId.newBuilder();
+
+        final var endPointIdTopologyId = endPointId.getTopologyId();
+        final var endPointIdDeviceId = endPointId.getDeviceId();
+        final var endPointIdId = endPointId.getId();
+
+        final var serializedTopologyId = serialize(endPointIdTopologyId);
+        final var serializedDeviceId = serializeDeviceId(endPointIdDeviceId);
+        final var serializedEndPointIdId = serializeUuid(endPointIdId);
+
+        builder.setTopologyId(serializedTopologyId);
+        builder.setDeviceId(serializedDeviceId);
+        builder.setEndpointUuid(serializedEndPointIdId);
+
+        return builder.build();
+    }
+
+    public EndPointId deserialize(ContextOuterClass.EndPointId serializedEndPointId) {
+        final var serializedTopologyId = serializedEndPointId.getTopologyId();
+        final var serializedDeviceId = serializedEndPointId.getDeviceId();
+        final var serializedId = serializedEndPointId.getEndpointUuid();
+
+        final var topologyId = deserialize(serializedTopologyId);
+        final var deviceId = deserialize(serializedDeviceId);
+        final var id = deserialize(serializedId);
+
+        return new EndPointId(topologyId, deviceId, id);
+    }
+
+    public Acl.AclRuleTypeEnum serialize(AclRuleTypeEnum aclRuleTypeEnum) {
+        switch (aclRuleTypeEnum) {
+            case IPV4:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4;
+            case IPV6:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6;
+            case L2:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_L2;
+            case MPLS:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS;
+            case MIXED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED;
+            case UNDEFINED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED;
+            default:
+                return Acl.AclRuleTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclRuleTypeEnum deserialize(Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        switch (serializedAclRuleTypeEnum) {
+            case ACLRULETYPE_IPV4:
+                return AclRuleTypeEnum.IPV4;
+            case ACLRULETYPE_IPV6:
+                return AclRuleTypeEnum.IPV6;
+            case ACLRULETYPE_L2:
+                return AclRuleTypeEnum.L2;
+            case ACLRULETYPE_MPLS:
+                return AclRuleTypeEnum.MPLS;
+            case ACLRULETYPE_MIXED:
+                return AclRuleTypeEnum.MIXED;
+            case UNRECOGNIZED:
+            default:
+                return AclRuleTypeEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclMatch serialize(AclMatch aclMatch) {
+        final var builder = Acl.AclMatch.newBuilder();
+
+        final var dscp = aclMatch.getDscp();
+        final var protocol = aclMatch.getProtocol();
+        final var srcAddress = aclMatch.getSrcAddress();
+        final var dstAddress = aclMatch.getDstAddress();
+        final var srcPort = aclMatch.getSrcPort();
+        final var dstPort = aclMatch.getDstPort();
+        final var startMplsLabel = aclMatch.getStartMplsLabel();
+        final var endMplsLabel = aclMatch.getEndMplsLabel();
+
+        builder.setDscp(dscp);
+        builder.setProtocol(protocol);
+        builder.setSrcAddress(srcAddress);
+        builder.setDstAddress(dstAddress);
+        builder.setSrcPort(srcPort);
+        builder.setDstPort(dstPort);
+        builder.setStartMplsLabel(startMplsLabel);
+        builder.setEndMplsLabel(endMplsLabel);
+
+        return builder.build();
+    }
+
+    public AclMatch deserialize(Acl.AclMatch serializedAclMatch) {
+        final var dscp = serializedAclMatch.getDscp();
+        final var protocol = serializedAclMatch.getProtocol();
+        final var srcAddress = serializedAclMatch.getSrcAddress();
+        final var dstAddress = serializedAclMatch.getDstAddress();
+        final var srcPort = serializedAclMatch.getSrcPort();
+        final var dstPort = serializedAclMatch.getDstPort();
+        final var startMplsLabel = serializedAclMatch.getStartMplsLabel();
+        final var endMplsLabel = serializedAclMatch.getEndMplsLabel();
+
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    public Acl.AclForwardActionEnum serialize(AclForwardActionEnum aclForwardActionEnum) {
+        switch (aclForwardActionEnum) {
+            case DROP:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP;
+            case ACCEPT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT;
+            case REJECT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT;
+            case UNDEFINED:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED;
+            default:
+                return Acl.AclForwardActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclForwardActionEnum deserialize(Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        switch (serializedAclForwardActionEnum) {
+            case ACLFORWARDINGACTION_DROP:
+                return AclForwardActionEnum.DROP;
+            case ACLFORWARDINGACTION_ACCEPT:
+                return AclForwardActionEnum.ACCEPT;
+            case ACLFORWARDINGACTION_REJECT:
+                return AclForwardActionEnum.REJECT;
+            case UNRECOGNIZED:
+            default:
+                return AclForwardActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclLogActionEnum serialize(AclLogActionEnum aclLogActionEnum) {
+        switch (aclLogActionEnum) {
+            case NO_LOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_NOLOG;
+            case SYSLOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG;
+            case UNDEFINED:
+                return Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED;
+            default:
+                return Acl.AclLogActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclLogActionEnum deserialize(Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        switch (serializedAclLogActionEnum) {
+            case ACLLOGACTION_NOLOG:
+                return AclLogActionEnum.NO_LOG;
+            case ACLLOGACTION_SYSLOG:
+                return AclLogActionEnum.SYSLOG;
+            case UNRECOGNIZED:
+            default:
+                return AclLogActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclAction serialize(AclAction aclAction) {
+        final var builder = Acl.AclAction.newBuilder();
+
+        final var aclForwardActionEnum = aclAction.getAclForwardActionEnum();
+        final var aclLogActionEnum = aclAction.getAclLogActionEnum();
+
+        final var serializedAclForwardActionEnum = serialize(aclForwardActionEnum);
+        final var serializedAclLogActionEnum = serialize(aclLogActionEnum);
+
+        builder.setForwardAction(serializedAclForwardActionEnum);
+        builder.setLogAction(serializedAclLogActionEnum);
+
+        return builder.build();
+    }
+
+    public AclAction deserialize(Acl.AclAction serializedAclAction) {
+        final var serializedAclForwardActionEnum = serializedAclAction.getForwardAction();
+        final var serializedAclLogActionEnum = serializedAclAction.getLogAction();
+
+        final var aclForwardActionEnum = deserialize(serializedAclForwardActionEnum);
+        final var aclLogActionEnum = deserialize(serializedAclLogActionEnum);
+
+        return new AclAction(aclForwardActionEnum, aclLogActionEnum);
+    }
+
+    public Acl.AclEntry serialize(AclEntry aclEntry) {
+        final var builder = Acl.AclEntry.newBuilder();
+
+        final var sequenceId = aclEntry.getSequenceId();
+        final var description = aclEntry.getDescription();
+        final var aclMatch = aclEntry.getMatch();
+        final var aclAction = aclEntry.getAction();
+
+        final var serializedAclMatch = serialize(aclMatch);
+        final var serializedAclAction = serialize(aclAction);
+
+        builder.setSequenceId(sequenceId);
+        builder.setDescription(description);
+        builder.setMatch(serializedAclMatch);
+        builder.setAction(serializedAclAction);
+
+        return builder.build();
+    }
+
+    public AclEntry deserialize(Acl.AclEntry serializedAclEntry) {
+        final var sequenceId = serializedAclEntry.getSequenceId();
+        final var description = serializedAclEntry.getDescription();
+        final var serializedAclMatch = serializedAclEntry.getMatch();
+        final var serializedAclAction = serializedAclEntry.getAction();
+
+        final var aclMatch = deserialize(serializedAclMatch);
+        final var aclAction = deserialize(serializedAclAction);
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
+    public Acl.AclRuleSet serialize(AclRuleSet aclRuleSet) {
+        final var builder = Acl.AclRuleSet.newBuilder();
+
+        final var name = aclRuleSet.getName();
+        final var type = aclRuleSet.getType();
+        final var description = aclRuleSet.getDescription();
+        final var userId = aclRuleSet.getUserId();
+        final var entries = aclRuleSet.getEntries();
+
+        final var serializedType = serialize(type);
+        final var serializedEntries =
+                entries.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setName(name);
+        builder.setType(serializedType);
+        builder.setDescription(description);
+        builder.setUserId(userId);
+        builder.addAllEntries(serializedEntries);
+
+        return builder.build();
+    }
+
+    public AclRuleSet deserialize(Acl.AclRuleSet serializedAclRuleSet) {
+        final var serializedName = serializedAclRuleSet.getName();
+        final var serializedType = serializedAclRuleSet.getType();
+        final var serializedDescription = serializedAclRuleSet.getDescription();
+        final var serializedUserId = serializedAclRuleSet.getUserId();
+        final var serializedEntries = serializedAclRuleSet.getEntriesList();
+
+        final var type = deserialize(serializedType);
+        final var entries =
+                serializedEntries.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new AclRuleSet(serializedName, type, serializedDescription, serializedUserId, entries);
+    }
+
+    public ConfigRule_ACL serialize(ConfigRuleAcl configRuleAcl) {
+        final var builder = ContextOuterClass.ConfigRule_ACL.newBuilder();
+
+        final var endPointId = configRuleAcl.getEndPointId();
+        final var aclRuleSet = configRuleAcl.getRuleSet();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedAclRuleSet = serialize(aclRuleSet);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setRuleSet(serializedAclRuleSet);
+
+        return builder.build();
+    }
+
+    public ConfigRuleAcl deserialize(ConfigRule_ACL serializedConfigRuleAcl) {
+        final var serializedEndPointId = serializedConfigRuleAcl.getEndpointId();
+        final var serializedAclRuleSet = serializedConfigRuleAcl.getRuleSet();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var aclRuleSet = deserialize(serializedAclRuleSet);
+
+        return new ConfigRuleAcl(endPointId, aclRuleSet);
+    }
+
+    public ConfigRule_Custom serialize(ConfigRuleCustom configRuleCustom) {
+        final var builder = ConfigRule_Custom.newBuilder();
+
+        final var resourceKey = configRuleCustom.getResourceKey();
+        final var resourceValue = configRuleCustom.getResourceValue();
+
+        builder.setResourceKey(resourceKey);
+        builder.setResourceValue(resourceValue);
+
+        return builder.build();
+    }
+
+    public ConfigRuleCustom deserialize(ConfigRule_Custom serializedConfigRuleCustom) {
+        final var serializedResourceKey = serializedConfigRuleCustom.getResourceKey();
+        final var serializedResourceValue = serializedConfigRuleCustom.getResourceValue();
+
+        return new ConfigRuleCustom(serializedResourceKey, serializedResourceValue);
+    }
+
     public ContextOuterClass.ConfigRule serialize(ConfigRule configRule) {
         final var builder = ContextOuterClass.ConfigRule.newBuilder();
 
-        builder.setAction(serialize(configRule.getConfigActionEnum()));
-        builder.setResourceKey(configRule.getResourceKey());
-        builder.setResourceValue(configRule.getResourceValue());
+        final var configActionEnum = configRule.getConfigActionEnum();
+        final var configRuleType = configRule.getConfigRuleType();
+        final var configRuleTypeSpecificType = configRuleType.getConfigRuleType();
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleAcl) {
+            final var endPointId = ((ConfigRuleAcl) configRuleTypeSpecificType).getEndPointId();
+            final var aclRuleSet = ((ConfigRuleAcl) configRuleTypeSpecificType).getRuleSet();
+
+            final var serializedEndPointId = serialize(endPointId);
+            final var serializedAclRuleSet = serialize(aclRuleSet);
+
+            final var serializedConfigRuleAcl =
+                    ConfigRule_ACL.newBuilder()
+                            .setEndpointId(serializedEndPointId)
+                            .setRuleSet(serializedAclRuleSet)
+                            .build();
+
+            builder.setAcl(serializedConfigRuleAcl);
+        }
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleCustom) {
+            final var configRuleCustomResourceKey =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceKey();
+            final var configRuleCustomResourceValue =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceValue();
+
+            final var serializedConfigRuleCustom =
+                    ConfigRule_Custom.newBuilder()
+                            .setResourceKey(configRuleCustomResourceKey)
+                            .setResourceValue(configRuleCustomResourceValue)
+                            .build();
+
+            builder.setCustom(serializedConfigRuleCustom);
+        }
+
+        final var serializedConfigActionEnum = serialize(configActionEnum);
+
+        builder.setAction(serializedConfigActionEnum);
 
         return builder.build();
     }
 
-    public ConfigRule deserialize(ContextOuterClass.ConfigRule configRule) {
-        final var configActionEnum = deserialize(configRule.getAction());
+    public ConfigRule deserialize(ContextOuterClass.ConfigRule serializedConfigRule) {
+        final var serializedConfigActionEnum = serializedConfigRule.getAction();
+        final var typeOfConfigRule = serializedConfigRule.getConfigRuleCase();
+
+        final var configActionEnum = deserialize(serializedConfigActionEnum);
+
+        switch (typeOfConfigRule) {
+            case ACL:
+                final var serializedConfigRuleAcl = serializedConfigRule.getAcl();
+
+                final var configRuleAcl = deserialize(serializedConfigRuleAcl);
+                final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
 
-        return new ConfigRule(
-                configActionEnum, configRule.getResourceKey(), configRule.getResourceValue());
+                return new ConfigRule(configActionEnum, configRuleTypeAcl);
+            case CUSTOM:
+                final var serializedConfigRuleCustom = serializedConfigRule.getCustom();
+
+                final var configRuleCustom = deserialize(serializedConfigRuleCustom);
+                final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom);
+
+                return new ConfigRule(configActionEnum, configRuleTypeCustom);
+            default:
+            case CONFIGRULE_NOT_SET:
+                throw new IllegalStateException("Config Rule not set");
+        }
     }
 
     public ContextOuterClass.DeviceConfig serialize(DeviceConfig deviceConfig) {
@@ -275,26 +699,216 @@ public class Serializer {
         }
     }
 
+    public KpiSampleTypes.KpiSampleType serialize(KpiSampleType kpiSampleType) {
+        switch (kpiSampleType) {
+            case PACKETS_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED;
+            case PACKETS_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED;
+            case BYTES_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED;
+            case BYTES_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED;
+            case UNKNOWN:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN;
+            default:
+                return KpiSampleTypes.KpiSampleType.UNRECOGNIZED;
+        }
+    }
+
+    public KpiSampleType deserialize(KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        switch (serializedKpiSampleType) {
+            case KPISAMPLETYPE_PACKETS_TRANSMITTED:
+                return KpiSampleType.PACKETS_TRANSMITTED;
+            case KPISAMPLETYPE_PACKETS_RECEIVED:
+                return KpiSampleType.PACKETS_RECEIVED;
+            case KPISAMPLETYPE_BYTES_TRANSMITTED:
+                return KpiSampleType.BYTES_TRANSMITTED;
+            case KPISAMPLETYPE_BYTES_RECEIVED:
+                return KpiSampleType.BYTES_RECEIVED;
+            case KPISAMPLETYPE_UNKNOWN:
+            default:
+                return KpiSampleType.UNKNOWN;
+        }
+    }
+
+    public ContextOuterClass.Location serialize(Location location) {
+        final var builder = ContextOuterClass.Location.newBuilder();
+
+        final var locationType = location.getLocationType();
+        final var locationTypeSpecificType = locationType.getLocationType();
+
+        if (locationTypeSpecificType instanceof GpsPosition) {
+            final var latitude = ((GpsPosition) locationTypeSpecificType).getLatitude();
+            final var longitude = ((GpsPosition) locationTypeSpecificType).getLongitude();
+
+            final var serializedGpsPosition =
+                    ContextOuterClass.GPS_Position.newBuilder()
+                            .setLatitude(latitude)
+                            .setLongitude(longitude)
+                            .build();
+
+            builder.setGpsPosition(serializedGpsPosition);
+        }
+
+        if (locationTypeSpecificType instanceof String) {
+            final var region = ((String) locationTypeSpecificType);
+
+            builder.setRegion(region);
+        }
+
+        return builder.build();
+    }
+
+    public Location deserialize(ContextOuterClass.Location serializedLocation) {
+        final var typeOfLocation = serializedLocation.getLocationCase();
+
+        switch (typeOfLocation) {
+            case REGION:
+                final var region = serializedLocation.getRegion();
+                final var locationTypeRegion = new LocationTypeRegion(region);
+
+                return new Location(locationTypeRegion);
+            case GPS_POSITION:
+                final var serializedGpsPosition = serializedLocation.getGpsPosition();
+                final var latitude = serializedGpsPosition.getLatitude();
+                final var longitude = serializedGpsPosition.getLongitude();
+
+                final var gpsPosition = new GpsPosition(latitude, longitude);
+                final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+
+                return new Location(locationTypeGpsPosition);
+            default:
+            case LOCATION_NOT_SET:
+                throw new IllegalStateException("Location value not set");
+        }
+    }
+
+    public ContextOuterClass.DeviceDriverEnum serialize(DeviceDriverEnum deviceDriverEnum) {
+        switch (deviceDriverEnum) {
+            case OPENCONFIG:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG;
+            case TRANSPORT_API:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API;
+            case P4:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4;
+            case IETF_NETWORK_TOPOLOGY:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
+            case ONF_TR_352:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352;
+            case UNDEFINED:
+            default:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED;
+        }
+    }
+
+    public DeviceDriverEnum deserialize(
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        switch (serializedDeviceDriverEnum) {
+            case DEVICEDRIVER_OPENCONFIG:
+                return DeviceDriverEnum.OPENCONFIG;
+            case DEVICEDRIVER_TRANSPORT_API:
+                return DeviceDriverEnum.TRANSPORT_API;
+            case DEVICEDRIVER_P4:
+                return DeviceDriverEnum.P4;
+            case DEVICEDRIVER_IETF_NETWORK_TOPOLOGY:
+                return DeviceDriverEnum.IETF_NETWORK_TOPOLOGY;
+            case DEVICEDRIVER_ONF_TR_352:
+                return DeviceDriverEnum.ONF_TR_352;
+            case DEVICEDRIVER_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceDriverEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.EndPoint serialize(EndPoint endPoint) {
+        final var builder = ContextOuterClass.EndPoint.newBuilder();
+
+        final var endPointId = endPoint.getEndPointId();
+        final var endPointType = endPoint.getEndPointType();
+        final var kpiSampleTypes = endPoint.getKpiSampleTypes();
+        final var endPointLocation = endPoint.getEndPointLocation();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedEndPointLocation = serialize(endPointLocation);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setEndpointType(endPointType);
+        builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
+        builder.setEndpointLocation(serializedEndPointLocation);
+
+        return builder.build();
+    }
+
+    public EndPoint deserialize(ContextOuterClass.EndPoint serializedEndPoint) {
+        final var serializedEndPointId = serializedEndPoint.getEndpointId();
+        final var endPointType = serializedEndPoint.getEndpointType();
+        final var serializedKpiSampleTypes = serializedEndPoint.getKpiSampleTypesList();
+        final var serializedEndPointLocation = serializedEndPoint.getEndpointLocation();
+
+        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);
+    }
+
     public ContextOuterClass.Device serialize(Device device) {
         final var builder = ContextOuterClass.Device.newBuilder();
+
         final var deviceIdUuid = serializeUuid(device.getDeviceId());
         final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid);
+        final var deviceType = device.getDeviceType();
+        final var deviceConfig = device.getDeviceConfig();
+        final var deviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var deviceDrivers = device.getDeviceDrivers();
+        final var deviceEndPoints = device.getEndPoints();
+
+        final var serializedDeviceConfig = serialize(deviceConfig);
+        final var serializedDeviceOperationalStatus = serialize(deviceOperationalStatus);
+        final var serializedDeviceDrivers =
+                deviceDrivers.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedDeviceEndPoints =
+                deviceEndPoints.stream().map(this::serialize).collect(Collectors.toList());
 
         builder.setDeviceId(deviceId);
-        builder.setDeviceType(device.getDeviceType());
-        builder.setDeviceConfig(serialize(device.getDeviceConfig()));
-        builder.setDeviceOperationalStatus(serialize(device.getDeviceOperationalStatus()));
+        builder.setDeviceType(deviceType);
+        builder.setDeviceConfig(serializedDeviceConfig);
+        builder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        builder.addAllDeviceDrivers(serializedDeviceDrivers);
+        builder.addAllDeviceEndpoints(serializedDeviceEndPoints);
 
         return builder.build();
     }
 
     public Device deserialize(ContextOuterClass.Device device) {
-        final var id = deserialize(device.getDeviceId());
-        final var type = device.getDeviceType();
-        final var config = deserialize(device.getDeviceConfig());
-        final var operationalStatus = deserialize(device.getDeviceOperationalStatus());
 
-        return new Device(id, type, config, operationalStatus);
+        final var serializedDeviceId = device.getDeviceId();
+        final var deviceType = device.getDeviceType();
+        final var serializedDeviceConfig = device.getDeviceConfig();
+        final var serializedDeviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var serializedDeviceDrivers = device.getDeviceDriversList();
+        final var serializedDeviceEndPoints = device.getDeviceEndpointsList();
+
+        final var deviceId = deserialize(serializedDeviceId);
+        final var deviceConfig = deserialize(serializedDeviceConfig);
+        final var deviceOperationalStatus = deserialize(serializedDeviceOperationalStatus);
+        final var deviceDrivers =
+                serializedDeviceDrivers.stream().map(this::deserialize).collect(Collectors.toList());
+        final var deviceEndPoints =
+                serializedDeviceEndPoints.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new Device(
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus,
+                deviceDrivers,
+                deviceEndPoints);
     }
 
     public Uuid serializeUuid(String uuid) {
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclAction.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e3621bb45959becc80f03d51ad09471dc310eeb
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclAction.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.acl;
+
+public class AclAction {
+
+    private final AclForwardActionEnum aclForwardActionEnum;
+    private final AclLogActionEnum aclLogActionEnum;
+
+    public AclAction(AclForwardActionEnum aclForwardActionEnum, AclLogActionEnum aclLogActionEnum) {
+        this.aclForwardActionEnum = aclForwardActionEnum;
+        this.aclLogActionEnum = aclLogActionEnum;
+    }
+
+    public AclForwardActionEnum getAclForwardActionEnum() {
+        return aclForwardActionEnum;
+    }
+
+    public AclLogActionEnum getAclLogActionEnum() {
+        return aclLogActionEnum;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{aclForwardActionEnum:\"%s\", aclLogActionEnum:\"%s\"}",
+                getClass().getSimpleName(), aclForwardActionEnum.toString(), aclLogActionEnum.toString());
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclEntry.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclEntry.java
new file mode 100644
index 0000000000000000000000000000000000000000..3324a55cd0c9d165531b06aee4b3de09cce2506c
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclEntry.java
@@ -0,0 +1,55 @@
+/*
+* 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.acl;
+
+public class AclEntry {
+
+    private final int sequenceId;
+    private final String description;
+    private final AclMatch match;
+    private final AclAction action;
+
+    public AclEntry(int sequenceId, String description, AclMatch match, AclAction action) {
+        this.sequenceId = sequenceId;
+        this.description = description;
+        this.match = match;
+        this.action = action;
+    }
+
+    public int getSequenceId() {
+        return sequenceId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public AclMatch getMatch() {
+        return match;
+    }
+
+    public AclAction getAction() {
+        return action;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{sequenceId:\"%d\", description:\"%s\", %s, %s}",
+                getClass().getSimpleName(), sequenceId, description, match, action);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclForwardActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclForwardActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..9afaabcd945adcbf474499efee930c54f7e12649
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclForwardActionEnum.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.acl;
+
+public enum AclForwardActionEnum {
+    UNDEFINED,
+    DROP,
+    ACCEPT,
+    REJECT,
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclLogActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclLogActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..cb9a75b43a67c1445239231c456f49546308b16f
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclLogActionEnum.java
@@ -0,0 +1,23 @@
+/*
+* 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.acl;
+
+public enum AclLogActionEnum {
+    UNDEFINED,
+    NO_LOG,
+    SYSLOG
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclMatch.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclMatch.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca679ea3691ce5c05a64caa17bc86cfc3436dfc2
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclMatch.java
@@ -0,0 +1,95 @@
+/*
+* 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.acl;
+
+public class AclMatch {
+
+    private final int dscp;
+    private final int protocol;
+    private final String srcAddress;
+    private final String dstAddress;
+    private final int srcPort;
+    private final int dstPort;
+    private final int startMplsLabel;
+    private final int endMplsLabel;
+
+    public AclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        this.dscp = dscp;
+        this.protocol = protocol;
+        this.srcAddress = srcAddress;
+        this.dstAddress = dstAddress;
+        this.srcPort = srcPort;
+        this.dstPort = dstPort;
+        this.startMplsLabel = startMplsLabel;
+        this.endMplsLabel = endMplsLabel;
+    }
+
+    public int getDscp() {
+        return dscp;
+    }
+
+    public int getProtocol() {
+        return protocol;
+    }
+
+    public String getSrcAddress() {
+        return srcAddress;
+    }
+
+    public String getDstAddress() {
+        return dstAddress;
+    }
+
+    public int getSrcPort() {
+        return srcPort;
+    }
+
+    public int getDstPort() {
+        return dstPort;
+    }
+
+    public int getStartMplsLabel() {
+        return startMplsLabel;
+    }
+
+    public int getEndMplsLabel() {
+        return endMplsLabel;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{dscp:\"%d\", protocol:\"%d\", srcAddress:\"%s\", dstAddress:\"%s\", srcPort:\"%d\", dstPort:\"%d\", startMplsLabel:\"%d\", endMplsLabel:\"%d\"}",
+                getClass().getSimpleName(),
+                dscp,
+                protocol,
+                srcAddress,
+                dstAddress,
+                srcPort,
+                dstPort,
+                startMplsLabel,
+                endMplsLabel);
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..4a919a6842774b1dcdb8f6cfad3215f54bb0e4f6
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleSet.java
@@ -0,0 +1,73 @@
+/*
+* 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.acl;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class AclRuleSet {
+
+    private final String name;
+    private final AclRuleTypeEnum type;
+    private final String description;
+    private final String userId;
+    private final List<AclEntry> entries;
+
+    public AclRuleSet(
+            String name,
+            AclRuleTypeEnum type,
+            String description,
+            String userId,
+            List<AclEntry> entries) {
+        this.name = name;
+        this.type = type;
+        this.description = description;
+        this.userId = userId;
+        this.entries = entries;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public AclRuleTypeEnum getType() {
+        return type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public List<AclEntry> getEntries() {
+        return entries;
+    }
+
+    @Override
+    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(", "));
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleTypeEnum.java b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleTypeEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..2361e21c10ab940337503d478798ed1d90075abe
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/acl/AclRuleTypeEnum.java
@@ -0,0 +1,26 @@
+/*
+* 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.acl;
+
+public enum AclRuleTypeEnum {
+    UNDEFINED,
+    IPV4,
+    IPV6,
+    L2,
+    MPLS,
+    MIXED
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
index 3bae4161d61d7c94f639b3953324981dca2a1b3d..2b96acecebc7fbf76167931d953af27c46338fe8 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
index 7bec6413818342f955abcaa2497f8c174951e8dd..7a50500377399692bd6f1497b8fd4366da55a413 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
@@ -19,8 +19,8 @@ package eu.teraflow.automation.context;
 import context.ContextOuterClass;
 import context.MutinyContextServiceGrpc.MutinyContextServiceStub;
 import eu.teraflow.automation.Serializer;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
index c3e01a1258c0bf99827fd81f0c2e9c087498d803..f5316dc4158d514d3b524f52a63f92317b777ddb 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
index 10d16bdf9e8eec3434899ef1454762619afdc805..fc65296b7c39b86567e63169e0a6f7d1b0f43fce 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.context;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceEvent;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import io.smallrye.mutiny.Multi;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigActionEnum.java
similarity index 93%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java
rename to src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigActionEnum.java
index bbe8d5916975d8541000c9df748fe1a79c3037f6..f79562d0dc69cf1582998c7bd6625634498174d4 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigActionEnum.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.automation.context.model;
 
 public enum ConfigActionEnum {
     UNDEFINED,
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRule.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRule.java
new file mode 100644
index 0000000000000000000000000000000000000000..334bb8964a917f27c752360e362796389f8b0056
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRule.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.context.model;
+
+public class ConfigRule {
+
+    private final ConfigActionEnum configActionEnum;
+    private final ConfigRuleType<?> configRuleType;
+
+    public ConfigRule(ConfigActionEnum configActionEnum, ConfigRuleType<?> configRuleType) {
+        this.configActionEnum = configActionEnum;
+        this.configRuleType = configRuleType;
+    }
+
+    public ConfigActionEnum getConfigActionEnum() {
+        return configActionEnum;
+    }
+
+    public ConfigRuleType getConfigRuleType() {
+        return configRuleType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{configActionEnum:\"%s\", %s}",
+                getClass().getSimpleName(), configActionEnum, configRuleType);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleAcl.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..c749519fdddaf6f5466f81d713bdece51ff7f026
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleAcl.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.context.model;
+
+import eu.teraflow.automation.acl.AclRuleSet;
+
+public class ConfigRuleAcl {
+
+    private final EndPointId endPointId;
+    private final AclRuleSet ruleSet;
+
+    public ConfigRuleAcl(EndPointId endPointId, AclRuleSet ruleSet) {
+        this.endPointId = endPointId;
+        this.ruleSet = ruleSet;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public AclRuleSet getRuleSet() {
+        return ruleSet;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), endPointId, ruleSet);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleCustom.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..d60411fb4acc88e73ed840d827ca1d078fd36856
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleCustom.java
@@ -0,0 +1,41 @@
+/*
+* 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 ConfigRuleCustom {
+
+    private final String resourceKey;
+    private final String resourceValue;
+
+    public ConfigRuleCustom(String resourceKey, String resourceValue) {
+        this.resourceKey = resourceKey;
+        this.resourceValue = resourceValue;
+    }
+
+    public String getResourceKey() {
+        return resourceKey;
+    }
+
+    public String getResourceValue() {
+        return resourceValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), resourceKey, resourceValue);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleType.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..874c633d0f0509381851a728413a1fc909cb380d
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleType.java
@@ -0,0 +1,22 @@
+/*
+* 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 interface ConfigRuleType<T> {
+
+    public T getConfigRuleType();
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeAcl.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..f802549132f0a48973442bbbee6240d1611d2fa1
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeAcl.java
@@ -0,0 +1,36 @@
+/*
+* 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 ConfigRuleTypeAcl implements ConfigRuleType<ConfigRuleAcl> {
+
+    private final ConfigRuleAcl configRuleAcl;
+
+    public ConfigRuleTypeAcl(ConfigRuleAcl configRuleAcl) {
+        this.configRuleAcl = configRuleAcl;
+    }
+
+    @Override
+    public ConfigRuleAcl getConfigRuleType() {
+        return this.configRuleAcl;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:%s}", getClass().getSimpleName(), configRuleAcl);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeCustom.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..86137244d166e254ab27952ecb85611474ae14eb
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/ConfigRuleTypeCustom.java
@@ -0,0 +1,36 @@
+/*
+* 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 ConfigRuleTypeCustom implements ConfigRuleType<ConfigRuleCustom> {
+
+    private final ConfigRuleCustom configRuleCustom;
+
+    public ConfigRuleTypeCustom(ConfigRuleCustom configRuleCustom) {
+        this.configRuleCustom = configRuleCustom;
+    }
+
+    @Override
+    public ConfigRuleCustom getConfigRuleType() {
+        return this.configRuleCustom;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:%s}", getClass().getSimpleName(), configRuleCustom);
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..1b286f57173c48787460828ba6bfc2c43588d4db
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Device.java
@@ -0,0 +1,112 @@
+/*
+* 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;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class Device {
+
+    private final String deviceId;
+    private final String deviceType;
+    private DeviceConfig deviceConfig;
+    private DeviceOperationalStatus deviceOperationalStatus;
+    private List<DeviceDriverEnum> deviceDrivers;
+    private List<EndPoint> endPoints;
+
+    public Device(
+            String deviceId,
+            String deviceType,
+            DeviceConfig deviceConfig,
+            DeviceOperationalStatus deviceOperationalStatus,
+            List<DeviceDriverEnum> deviceDrivers,
+            List<EndPoint> endPoints) {
+
+        this.deviceId = deviceId;
+        this.deviceType = deviceType;
+        this.deviceConfig = deviceConfig;
+        this.deviceOperationalStatus = deviceOperationalStatus;
+        this.deviceDrivers = deviceDrivers;
+        this.endPoints = endPoints;
+    }
+
+    public Device(
+            String deviceId,
+            String deviceType,
+            DeviceOperationalStatus deviceOperationalStatus,
+            List<DeviceDriverEnum> deviceDrivers,
+            List<EndPoint> endPoints) {
+        this.deviceId = deviceId;
+        this.deviceType = deviceType;
+        this.deviceOperationalStatus = deviceOperationalStatus;
+        this.deviceDrivers = deviceDrivers;
+        this.endPoints = endPoints;
+    }
+
+    public boolean isEnabled() {
+        return deviceOperationalStatus == DeviceOperationalStatus.ENABLED;
+    }
+
+    public void enableDevice() {
+        this.deviceOperationalStatus = DeviceOperationalStatus.ENABLED;
+    }
+
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    public String getDeviceType() {
+        return deviceType;
+    }
+
+    public DeviceConfig getDeviceConfig() {
+        return deviceConfig;
+    }
+
+    public List<DeviceDriverEnum> getDeviceDrivers() {
+        return deviceDrivers;
+    }
+
+    public List<EndPoint> getEndPoints() {
+        return endPoints;
+    }
+
+    public DeviceOperationalStatus getDeviceOperationalStatus() {
+        return deviceOperationalStatus;
+    }
+
+    public void setDeviceConfiguration(DeviceConfig deviceConfig) {
+        this.deviceConfig = deviceConfig;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{deviceId:\"%s\", deviceType:\"%s\", %s, deviceOperationalStatus=\"%s\", [%s], [%s]}",
+                getClass().getSimpleName(),
+                deviceId,
+                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(", "));
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceConfig.java
similarity index 96%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java
rename to src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceConfig.java
index 6365b0ed9eeb1a5ebb0596c060e32e49d2f14e2f..edf2dbc6ff96bd26ee45345928b0c6d33b4ec73a 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceConfig.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.automation.context.model;
 
 import java.util.List;
 import java.util.stream.Collectors;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..8fc767ac2e5d7fed70f0375fcf8c820e30fbb149
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceDriverEnum.java
@@ -0,0 +1,26 @@
+/*
+* 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 enum DeviceDriverEnum {
+    UNDEFINED,
+    OPENCONFIG,
+    TRANSPORT_API,
+    P4,
+    IETF_NETWORK_TOPOLOGY,
+    ONF_TR_352
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceEvent.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java
similarity index 92%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceEvent.java
rename to src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java
index 5a021276c751813fa0fc1b0497ce514d5d4d5e72..efc0be8308fb9a75132cd604a84fd5b4822f3af7 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceEvent.java
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceEvent.java
@@ -14,9 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
-
-import eu.teraflow.automation.context.model.Event;
+package eu.teraflow.automation.context.model;
 
 public class DeviceEvent {
 
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceOperationalStatus.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceOperationalStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..50486469f1c8e9f8b9f965723b3432dbb7d0d4ca
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/DeviceOperationalStatus.java
@@ -0,0 +1,23 @@
+/*
+* 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 enum DeviceOperationalStatus {
+    UNDEFINED,
+    DISABLED,
+    ENABLED
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..f9fb8bf0d8406db4ee4fb07783eaf20bfd88e2b0
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPoint.java
@@ -0,0 +1,70 @@
+/*
+* 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;
+
+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;
+    private final String endPointType;
+    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;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public String getEndPointType() {
+        return endPointType;
+    }
+
+    public List<KpiSampleType> getKpiSampleTypes() {
+        return kpiSampleTypes;
+    }
+
+    public Location getEndPointLocation() {
+        return endPointLocation;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, endPointType:\"%s\", [%s], %s}",
+                getClass().getSimpleName(),
+                endPointId,
+                endPointType,
+                toString(kpiSampleTypes),
+                endPointLocation);
+    }
+
+    private 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/EndPointId.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPointId.java
new file mode 100644
index 0000000000000000000000000000000000000000..c94bcb0b16ecdb638bd37aea468b70e52ee68f99
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/EndPointId.java
@@ -0,0 +1,49 @@
+/*
+* 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 EndPointId {
+
+    private final TopologyId topologyId;
+    private final String deviceId;
+    private final String id;
+
+    public EndPointId(TopologyId topologyId, String deviceId, String id) {
+        this.topologyId = topologyId;
+        this.deviceId = deviceId;
+        this.id = id;
+    }
+
+    public TopologyId getTopologyId() {
+        return topologyId;
+    }
+
+    public String getDeviceId() {
+        return deviceId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, deviceId:\"%s\", id:\"%s\"}",
+                getClass().getSimpleName(), topologyId, deviceId, id);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/GpsPosition.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/GpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..9ee65b706bdb84e541b37f59108e6daa4b5fbf16
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/GpsPosition.java
@@ -0,0 +1,42 @@
+/*
+* 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 GpsPosition {
+
+    private final float latitude;
+    private final float longitude;
+
+    public GpsPosition(float latitude, float longitude) {
+        this.latitude = latitude;
+        this.longitude = longitude;
+    }
+
+    public float getLatitude() {
+        return latitude;
+    }
+
+    public float getLongitude() {
+        return longitude;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{latitude:\"%f\", longitude:\"%f\"}", getClass().getSimpleName(), latitude, longitude);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/Location.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/Location.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd056e80c65d1f75621253f3b4021827503ac0ad
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/Location.java
@@ -0,0 +1,35 @@
+/*
+* 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 Location {
+
+    private final LocationType<?> locationType;
+
+    public Location(LocationType<?> locationType) {
+        this.locationType = locationType;
+    }
+
+    public LocationType getLocationType() {
+        return locationType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), locationType);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationType.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5e23ab6278d748766347b61ffb0fa481a16ef68
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationType.java
@@ -0,0 +1,22 @@
+/*
+* 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 interface LocationType<T> {
+
+    public T getLocationType();
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeGpsPosition.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeGpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..a9af77dea36948cd80ce2ce9d48c349923127839
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeGpsPosition.java
@@ -0,0 +1,35 @@
+/*
+* 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 LocationTypeGpsPosition implements LocationType<GpsPosition> {
+    private final GpsPosition gpsPosition;
+
+    public LocationTypeGpsPosition(GpsPosition gpsPosition) {
+        this.gpsPosition = gpsPosition;
+    }
+
+    @Override
+    public GpsPosition getLocationType() {
+        return this.gpsPosition;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), gpsPosition);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeRegion.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeRegion.java
new file mode 100644
index 0000000000000000000000000000000000000000..5b12ee0169504874a12125ca6cd04db877946646
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/LocationTypeRegion.java
@@ -0,0 +1,35 @@
+/*
+* 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 LocationTypeRegion implements LocationType<String> {
+    private final String region;
+
+    public LocationTypeRegion(String region) {
+        this.region = region;
+    }
+
+    @Override
+    public String getLocationType() {
+        return this.region;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{region:\"%s\"}", getClass().getSimpleName(), region);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/context/model/TopologyId.java b/src/automation/src/main/java/eu/teraflow/automation/context/model/TopologyId.java
new file mode 100644
index 0000000000000000000000000000000000000000..ce9f7836f6fe9cd2fc6095f43b02875fdcb98e26
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/model/TopologyId.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.context.model;
+
+public class TopologyId {
+
+    private final String contextId;
+    private final String id;
+
+    public TopologyId(String contextId, String id) {
+
+        this.contextId = contextId;
+        this.id = id;
+    }
+
+    public String getContextId() {
+        return contextId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{contextId:\"%s\", id:\"%s\"}", getClass().getSimpleName(), contextId, id);
+    }
+}
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 41a7d18f5a858b2d4c04fbaa1ce3577f3966e4b8..8cbf0885ba6537e7bca31e5bb6efd0494e4fe879 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
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.device;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceGateway {
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 00270e478c233bbc2cc8ae7924838c835aac013e..7849e36e6965df293381e5bc8a04db552d3f28d4 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
@@ -18,8 +18,8 @@ package eu.teraflow.automation.device;
 
 import device.DeviceService;
 import eu.teraflow.automation.Serializer;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.quarkus.grpc.GrpcClient;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
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 0be0688b50c75184a16766dfc6cda16ad41bf3b6..229aea7dfe29a11487d3e61709981300a2ff9600 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
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.device;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 
 public interface DeviceService {
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 f58c03ee784f215fb7e64ebba2f26a5d8c203f3f..d5dd6fc2be73b55da9f6d31efbc21bf40c431c20 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
@@ -16,8 +16,8 @@
 
 package eu.teraflow.automation.device;
 
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.context.model.Device;
+import eu.teraflow.automation.context.model.DeviceConfig;
 import io.smallrye.mutiny.Uni;
 import javax.enterprise.context.ApplicationScoped;
 import javax.inject.Inject;
diff --git a/src/automation/src/main/java/eu/teraflow/automation/kpi_sample_types/model/KpiSampleType.java b/src/automation/src/main/java/eu/teraflow/automation/kpi_sample_types/model/KpiSampleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..9a46e8ffde183deb4a23e5fde16ae8a798fb6e4b
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/kpi_sample_types/model/KpiSampleType.java
@@ -0,0 +1,25 @@
+/*
+* 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.kpi_sample_types.model;
+
+public enum KpiSampleType {
+    UNKNOWN,
+    PACKETS_TRANSMITTED,
+    PACKETS_RECEIVED,
+    BYTES_TRANSMITTED,
+    BYTES_RECEIVED
+}
diff --git a/src/automation/src/main/proto/acl.proto b/src/automation/src/main/proto/acl.proto
new file mode 120000
index 0000000000000000000000000000000000000000..158ae78eb5bdea534ba7008114c2b97ed6dffed8
--- /dev/null
+++ b/src/automation/src/main/proto/acl.proto
@@ -0,0 +1 @@
+../../../../../proto/acl.proto
\ No newline at end of file
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 276a74742f80d4fcf54649241f0432635f40ee4a..d697569123484d1f8022a79794cf0367440cbbab 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
@@ -21,12 +21,21 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
 import automation.Automation;
 import context.ContextOuterClass;
 import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+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.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.device.DeviceGateway;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import io.quarkus.test.junit.QuarkusTest;
 import io.quarkus.test.junit.mockito.InjectMock;
 import io.smallrye.mutiny.Uni;
@@ -50,7 +59,6 @@ class AutomationFunctionalServiceTest {
 
     @Test
     void shouldConfigureDevice() {
-
         final var uuidForDeviceRoleId =
                 ContextOuterClass.Uuid.newBuilder()
                         .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
@@ -73,8 +81,14 @@ class AutomationFunctionalServiceTest {
         String deviceId = outDeviceRoleId.getDevRoleId().toString();
         String deviceType = "cisco";
 
-        ConfigRule configRule1 = new ConfigRule(ConfigActionEnum.UNDEFINED, "1", "1");
-        ConfigRule configRule2 = new ConfigRule(ConfigActionEnum.SET, "2", "2");
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        ConfigRule configRule1 = new ConfigRule(ConfigActionEnum.UNDEFINED, configRuleTypeA);
+
+        final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+        final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB);
+        ConfigRule configRule2 = new ConfigRule(ConfigActionEnum.SET, configRuleTypeB);
+
         List<ConfigRule> configRuleList = new ArrayList<>();
         configRuleList.add(configRule1);
         configRuleList.add(configRule2);
@@ -83,7 +97,36 @@ class AutomationFunctionalServiceTest {
         Uni<DeviceConfig> expectedDeviceConfigUni = Uni.createFrom().item(expectedDeviceConfig);
         Uni<String> expectedDeviceId = Uni.createFrom().item(deviceId);
 
-        Device device = new Device(deviceId, deviceType, DeviceOperationalStatus.DISABLED);
+        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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        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);
@@ -107,8 +150,20 @@ class AutomationFunctionalServiceTest {
                             final var rulesList = deviceConfig.getDeviceConfig().getConfigRules();
 
                             for (int i = 0; i < rulesList.size(); i++) {
-                                assertThat(rulesList.get(i).getResourceKey()).isEqualTo(String.valueOf(i + 1));
-                                assertThat(rulesList.get(i).getResourceValue()).isEqualTo(String.valueOf(i + 1));
+
+                                if (rulesList.get(i).getConfigRuleType().getConfigRuleType()
+                                        instanceof ConfigRuleCustom) {
+                                    assertThat(
+                                                    ((ConfigRuleCustom)
+                                                                    rulesList.get(i).getConfigRuleType().getConfigRuleType())
+                                                            .getResourceKey())
+                                            .isEqualTo(String.valueOf(i + 1));
+                                    assertThat(
+                                                    ((ConfigRuleCustom)
+                                                                    rulesList.get(i).getConfigRuleType().getConfigRuleType())
+                                                            .getResourceValue())
+                                            .isEqualTo(String.valueOf(i + 1));
+                                }
                             }
                             assertThat(deviceConfig.getDeviceType()).isEqualTo("cisco");
                             assertThat(deviceConfig.getDeviceId()).isEqualTo(deviceId);
@@ -142,14 +197,49 @@ class AutomationFunctionalServiceTest {
 
         List<ConfigRule> configRuleList = new ArrayList<>();
 
-        ConfigRule expectedConfigRule =
-                new ConfigRule(ConfigActionEnum.UNDEFINED, "001", "already-configured");
+        final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+
+        ConfigRule expectedConfigRule = new ConfigRule(ConfigActionEnum.UNDEFINED, configRuleType);
         configRuleList.add(expectedConfigRule);
 
         DeviceConfig expectedDeviceConfig = new DeviceConfig(configRuleList);
 
+        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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         Device device =
-                new Device(deviceId, deviceType, expectedDeviceConfig, DeviceOperationalStatus.ENABLED);
+                new Device(
+                        deviceId,
+                        deviceType,
+                        expectedDeviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
 
         Uni<Device> deviceUni = Uni.createFrom().item(device);
 
@@ -172,10 +262,27 @@ class AutomationFunctionalServiceTest {
                             final var rulesList = deviceConfig.getDeviceConfig().getConfigRules();
 
                             for (ConfigRule configRule : rulesList) {
-                                assertThat(configRule.getResourceKey())
-                                        .isEqualTo(expectedConfigRule.getResourceKey());
-                                assertThat(configRule.getResourceValue())
-                                        .isEqualTo(expectedConfigRule.getResourceValue());
+                                if (configRule.getConfigRuleType().getConfigRuleType()
+                                        instanceof ConfigRuleCustom) {
+
+                                    if (expectedConfigRule.getConfigRuleType().getConfigRuleType()
+                                            instanceof ConfigRuleCustom) {
+                                        assertThat(
+                                                        ((ConfigRuleCustom) configRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceKey())
+                                                .isEqualTo(
+                                                        ((ConfigRuleCustom)
+                                                                        expectedConfigRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceKey());
+                                        assertThat(
+                                                        ((ConfigRuleCustom) configRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceValue())
+                                                .isEqualTo(
+                                                        ((ConfigRuleCustom)
+                                                                        expectedConfigRule.getConfigRuleType().getConfigRuleType())
+                                                                .getResourceValue());
+                                    }
+                                }
                             }
                             assertThat(deviceConfig.getDeviceType()).isEqualTo("ztp");
                             assertThat(deviceConfig.getDeviceId()).isEqualTo(deviceId);
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 b1178e2dd458c64e27bd1b9948f6c04a46a957cf..d56ef139234df5da19f20364b5a93fd58ba35b4d 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
@@ -21,12 +21,21 @@ import static org.assertj.core.api.Assertions.assertThat;
 import automation.Automation;
 import automation.AutomationService;
 import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+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.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.device.DeviceGateway;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.kpi_sample_types.model.KpiSampleType;
 import eu.teraflow.automation.model.DeviceRole;
 import eu.teraflow.automation.model.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
@@ -66,13 +75,48 @@ class AutomationServiceTest {
         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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         final var emptyDeviceConfig = new DeviceConfig(List.of());
         final var disabledDevice =
-                new Device(DEVICE_ID, DEVICE_TYPE, emptyDeviceConfig, DeviceOperationalStatus.DISABLED);
+                new Device(
+                        DEVICE_ID,
+                        DEVICE_TYPE,
+                        emptyDeviceConfig,
+                        DeviceOperationalStatus.DISABLED,
+                        deviceDrivers,
+                        endPoints);
         Mockito.when(contextGateway.getDevice(Mockito.any()))
                 .thenReturn(Uni.createFrom().item(disabledDevice));
 
-        final var configRule = new ConfigRule(ConfigActionEnum.SET, "001", "initial-configuration");
+        final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleType);
         final var initialDeviceConfig = new DeviceConfig(List.of(configRule));
         Mockito.when(deviceGateway.getInitialConfiguration(Mockito.any()))
                 .thenReturn(Uni.createFrom().item(initialDeviceConfig));
diff --git a/src/automation/src/test/java/eu/teraflow/automation/ConfigRuleTypeTest.java b/src/automation/src/test/java/eu/teraflow/automation/ConfigRuleTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..ec1da0ccb4e9bee46d6327f1da2016610494714e
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/ConfigRuleTypeTest.java
@@ -0,0 +1,90 @@
+/*
+* 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 eu.teraflow.automation.acl.AclAction;
+import eu.teraflow.automation.acl.AclEntry;
+import eu.teraflow.automation.acl.AclForwardActionEnum;
+import eu.teraflow.automation.acl.AclLogActionEnum;
+import eu.teraflow.automation.acl.AclMatch;
+import eu.teraflow.automation.acl.AclRuleSet;
+import eu.teraflow.automation.acl.AclRuleTypeEnum;
+import eu.teraflow.automation.context.model.ConfigRuleAcl;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.automation.context.model.EndPointId;
+import eu.teraflow.automation.context.model.TopologyId;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class ConfigRuleTypeTest {
+
+    private AclMatch createAclMatch() {
+
+        return new AclMatch(1, 2, "192.168.3.52", "192.168.4.192", 3224, 3845, 5, 10);
+    }
+
+    private AclAction createAclAction() {
+
+        return new AclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+    }
+
+    private AclEntry createAclEntry(AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+    }
+
+    @Test
+    void shouldExtractConfigRuleCustomFromConfigRuleTypeCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom);
+
+        assertThat(configRuleTypeCustom.getConfigRuleType()).isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldExtractConfigRuleAclFromConfigRuleTypeAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var aclMatch = createAclMatch();
+        final var aclAction = createAclAction();
+        final var aclEntry = createAclEntry(aclMatch, aclAction);
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(expectedConfigRuleAcl);
+
+        assertThat(configRuleTypeAcl.getConfigRuleType()).isEqualTo(expectedConfigRuleAcl);
+    }
+}
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 6039de58ec8f991f5ccbe0bcfd21871ee1e4c432..e8a97d7922b49878af533c23918cf7b23aa20c06 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/ContextSubscriberTest.java
@@ -6,9 +6,9 @@ import static org.mockito.Mockito.verify;
 import automation.Automation;
 import context.ContextOuterClass;
 import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.context.model.DeviceEvent;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
-import eu.teraflow.automation.device.model.DeviceEvent;
 import io.quarkus.runtime.StartupEvent;
 import io.quarkus.test.junit.QuarkusTest;
 import io.quarkus.test.junit.mockito.InjectMock;
diff --git a/src/automation/src/test/java/eu/teraflow/automation/LocationTypeTest.java b/src/automation/src/test/java/eu/teraflow/automation/LocationTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f89830e425feffeac377c9d20c0561221f835ec6
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/LocationTypeTest.java
@@ -0,0 +1,49 @@
+/*
+* 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 eu.teraflow.automation.context.model.GpsPosition;
+import eu.teraflow.automation.context.model.LocationTypeGpsPosition;
+import eu.teraflow.automation.context.model.LocationTypeRegion;
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class LocationTypeTest {
+
+    @Test
+    void shouldExtractRegionFromLocationTypeRegion() {
+        final var expectedRegion = "ATH";
+
+        final var locationTypeRegion = new LocationTypeRegion(expectedRegion);
+
+        assertThat(locationTypeRegion.getLocationType()).isEqualTo(expectedRegion);
+    }
+
+    @Test
+    void shouldExtractLocationGpsPositionFromLocationTypeGpsPosition() {
+        final var latitude = 3.99f;
+        final var longitude = 77.32f;
+
+        final var expectedLocationGpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(expectedLocationGpsPosition);
+
+        assertThat(locationTypeGpsPosition.getLocationType()).isEqualTo(expectedLocationGpsPosition);
+    }
+}
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 ff74148548e4f0b024a8a6835ee63a2e77d66a55..35074b1dd4a62f0accf49db3ec87c32942de6183 100644
--- a/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
+++ b/src/automation/src/test/java/eu/teraflow/automation/SerializerTest.java
@@ -17,27 +17,51 @@
 package eu.teraflow.automation;
 
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 
+import acl.Acl;
 import automation.Automation;
 import context.ContextOuterClass;
 import context.ContextOuterClass.DeviceId;
 import context.ContextOuterClass.DeviceOperationalStatusEnum;
 import context.ContextOuterClass.Uuid;
+import eu.teraflow.automation.acl.AclAction;
+import eu.teraflow.automation.acl.AclEntry;
+import eu.teraflow.automation.acl.AclForwardActionEnum;
+import eu.teraflow.automation.acl.AclLogActionEnum;
+import eu.teraflow.automation.acl.AclMatch;
+import eu.teraflow.automation.acl.AclRuleSet;
+import eu.teraflow.automation.acl.AclRuleTypeEnum;
+import eu.teraflow.automation.context.model.ConfigActionEnum;
+import eu.teraflow.automation.context.model.ConfigRule;
+import eu.teraflow.automation.context.model.ConfigRuleAcl;
+import eu.teraflow.automation.context.model.ConfigRuleCustom;
+import eu.teraflow.automation.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.automation.context.model.ConfigRuleTypeCustom;
+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.DeviceEvent;
+import eu.teraflow.automation.context.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.EndPoint;
+import eu.teraflow.automation.context.model.EndPointId;
 import eu.teraflow.automation.context.model.Event;
 import eu.teraflow.automation.context.model.EventTypeEnum;
-import eu.teraflow.automation.device.model.ConfigActionEnum;
-import eu.teraflow.automation.device.model.ConfigRule;
-import eu.teraflow.automation.device.model.Device;
-import eu.teraflow.automation.device.model.DeviceConfig;
-import eu.teraflow.automation.device.model.DeviceEvent;
-import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.context.model.GpsPosition;
+import eu.teraflow.automation.context.model.Location;
+import eu.teraflow.automation.context.model.LocationTypeGpsPosition;
+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.DeviceRoleId;
 import eu.teraflow.automation.model.DeviceRoleType;
 import io.quarkus.test.junit.QuarkusTest;
 import java.util.List;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.inject.Inject;
+import kpi_sample_types.KpiSampleTypes;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
@@ -48,6 +72,31 @@ class SerializerTest {
 
     @Inject Serializer serializer;
 
+    private AclMatch createAclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    private AclAction createAclAction(
+            AclForwardActionEnum forwardActionEnum, AclLogActionEnum logActionEnum) {
+
+        return new AclAction(forwardActionEnum, logActionEnum);
+    }
+
+    private AclEntry createAclEntry(
+            int sequenceId, String description, AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
     @Test
     void shouldSerializeDeviceId() {
         final var expectedDeviceId = "expectedDeviceId";
@@ -219,9 +268,11 @@ class SerializerTest {
 
     @Test
     void shouldSerializeEvent() {
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
         final var expectedEvent =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(timestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
                         .build();
 
@@ -234,10 +285,11 @@ class SerializerTest {
     @Test
     void shouldDeserializeEvent() {
         final var expectedEvent = new Event(1, EventTypeEnum.CREATE);
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
 
         final var serializedEvent =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(timestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
                         .build();
         final var event = serializer.deserialize(serializedEvent);
@@ -249,9 +301,11 @@ class SerializerTest {
     void shouldSerializeDeviceEvent() {
         final var expectedUuid = Uuid.newBuilder().setUuid("deviceId");
         final var expectedDeviceId = DeviceId.newBuilder().setDeviceUuid(expectedUuid).build();
+        final var expectedTimestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
         final var expectedEvent =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(expectedTimestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
                         .build();
         final var expectedDeviceEvent =
@@ -271,15 +325,16 @@ class SerializerTest {
     void shouldDeserializeDeviceEvent() {
         final var dummyDeviceId = "deviceId";
         final var expectedEventType = EventTypeEnum.REMOVE;
-        final var expectedTimestamp = 1;
-        final var creationEvent = new Event(expectedTimestamp, expectedEventType);
+        final var expectedTimestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
+        final var creationEvent = new Event(1, expectedEventType);
         final var expectedDeviceEvent = new DeviceEvent(dummyDeviceId, creationEvent);
 
         final var deviceUuid = Uuid.newBuilder().setUuid("deviceId");
         final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceUuid).build();
         final var event =
                 ContextOuterClass.Event.newBuilder()
-                        .setTimestamp(1)
+                        .setTimestamp(expectedTimestamp)
                         .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE)
                         .build();
         final var serializedDeviceEvent =
@@ -315,85 +370,791 @@ class SerializerTest {
         assertThat(configAction).isEqualTo(expectedConfigAction);
     }
 
+    private static Stream<Arguments> provideAclRuleTypeEnum() {
+        return Stream.of(
+                Arguments.of(AclRuleTypeEnum.IPV4, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4),
+                Arguments.of(AclRuleTypeEnum.IPV6, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6),
+                Arguments.of(AclRuleTypeEnum.L2, Acl.AclRuleTypeEnum.ACLRULETYPE_L2),
+                Arguments.of(AclRuleTypeEnum.MPLS, Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS),
+                Arguments.of(AclRuleTypeEnum.MIXED, Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED),
+                Arguments.of(AclRuleTypeEnum.UNDEFINED, Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldSerializeAclRuleTypeEnum(
+            AclRuleTypeEnum aclRuleTypeEnum, Acl.AclRuleTypeEnum expectedAclRuleTypeEnum) {
+        final var serializedAclRuleTypeEnum = serializer.serialize(aclRuleTypeEnum);
+        assertThat(serializedAclRuleTypeEnum.getNumber())
+                .isEqualTo(expectedAclRuleTypeEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldDeserializeAclRuleTypeEnum(
+            AclRuleTypeEnum expectedAclRuleTypeEnum, Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        final var aclRuleTypeEnum = serializer.deserialize(serializedAclRuleTypeEnum);
+        assertThat(aclRuleTypeEnum).isEqualTo(expectedAclRuleTypeEnum);
+    }
+
+    private static Stream<Arguments> provideAclForwardActionEnum() {
+        return Stream.of(
+                Arguments.of(AclForwardActionEnum.DROP, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP),
+                Arguments.of(
+                        AclForwardActionEnum.ACCEPT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT),
+                Arguments.of(
+                        AclForwardActionEnum.REJECT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT),
+                Arguments.of(
+                        AclForwardActionEnum.UNDEFINED,
+                        Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldSerializeAclForwardActionEnum(
+            AclForwardActionEnum aclForwardActionEnum,
+            Acl.AclForwardActionEnum expectedAclForwardActionEnum) {
+        final var serializedAclForwardActionEnum = serializer.serialize(aclForwardActionEnum);
+        assertThat(serializedAclForwardActionEnum.getNumber())
+                .isEqualTo(expectedAclForwardActionEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldDeserializeAclForwardActionEnum(
+            AclForwardActionEnum expectedAclForwardActionEnum,
+            Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        final var aclForwardActionEnum = serializer.deserialize(serializedAclForwardActionEnum);
+        assertThat(aclForwardActionEnum).isEqualTo(expectedAclForwardActionEnum);
+    }
+
+    private static Stream<Arguments> provideAclLogActionEnum() {
+        return Stream.of(
+                Arguments.of(AclLogActionEnum.NO_LOG, Acl.AclLogActionEnum.ACLLOGACTION_NOLOG),
+                Arguments.of(AclLogActionEnum.SYSLOG, Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG),
+                Arguments.of(AclLogActionEnum.UNDEFINED, Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldSerializeAclLogActionEnum(
+            AclLogActionEnum aclLogActionEnum, Acl.AclLogActionEnum expectedAclLogActionEnum) {
+        final var serializedAclLogActionEnum = serializer.serialize(aclLogActionEnum);
+        assertThat(serializedAclLogActionEnum.getNumber())
+                .isEqualTo(expectedAclLogActionEnum.getNumber());
+    }
+
+    @Test
+    void shouldSerializeAclAction() {
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        assertThat(serializedAclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldDeserializeAclAction() {
+        final var expectedAclAction =
+                createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var serializedAclAction = serializer.serialize(expectedAclAction);
+        final var aclAction = serializer.deserialize(serializedAclAction);
+
+        assertThat(aclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldSerializeAclMatch() {
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+
+        assertThat(serializedAclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldDeserializeAclMatch() {
+        final var expectedAclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+
+        final var serializedAclMatch = serializer.serialize(expectedAclMatch);
+        final var aclMatch = serializer.deserialize(serializedAclMatch);
+
+        assertThat(aclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldSerializeAclEntry() {
+        final var sequenceId = 1;
+        final var description = "aclEntryDescription";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        final var expectedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(sequenceId)
+                        .setDescription(description)
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+
+        assertThat(serializedAclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldDeserializeAclEntry() {
+        final var sequenceId = 1;
+        final var description = "aclEntryDescription";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var expectedAclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclEntry = serializer.serialize(expectedAclEntry);
+        final var aclEntry = serializer.deserialize(serializedAclEntry);
+
+        assertThat(aclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldSerializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+        final var serializedAclEntries = List.of(serializedAclEntry);
+
+        final var expectedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName(aclRuleSetName)
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED)
+                        .setDescription(aclRuleSetDescription)
+                        .setUserId(aclRuleSetUserId)
+                        .addAllEntries(serializedAclEntries)
+                        .build();
+
+        final var serializedAclRuleset = serializer.serialize(aclRuleSet);
+
+        assertThat(serializedAclRuleset).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @Test
+    void shouldDeserializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var expectedAclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet = serializer.serialize(expectedAclRuleSet);
+        final var aclRuleSet = serializer.deserialize(serializedAclRuleSet);
+
+        assertThat(aclRuleSet).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldDeserializeAclLogActionEnum(
+            AclLogActionEnum expectedAclLogActionEnum, Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        final var aclLogActionEnum = serializer.deserialize(serializedAclLogActionEnum);
+        assertThat(aclLogActionEnum).isEqualTo(expectedAclLogActionEnum);
+    }
+
+    @Test
+    void shouldSerializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+        final var topologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedContextId = serializer.serializeContextId(expectedContextId);
+        final var serializedIdUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedIdUuid)
+                        .build();
+
+        final var serializedTopologyId = serializer.serialize(topologyId);
+
+        assertThat(serializedTopologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    @Test
+    void shouldDeserializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+
+        final var expectedTopologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var topologyId = serializer.deserialize(serializedTopologyId);
+
+        assertThat(topologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    @Test
+    void shouldSerializeEndPointId() {
+        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 serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointUuid)
+                        .build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+
+        assertThat(serializedEndPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    @Test
+    void shouldDeserializeEndPointId() {
+        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 serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var endPointId = serializer.deserialize(serializedEndPointId);
+
+        assertThat(endPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedAclRuleSet = serializer.serialize(aclRuleSet);
+
+        final var expectedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
+
+        final var serializedConfigRuleAcl = serializer.serialize(configRuleAcl);
+
+        assertThat(serializedConfigRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedConfigRuleAcl = serializer.serialize(expectedConfigRuleAcl);
+        final var configRuleAcl = serializer.deserialize(serializedConfigRuleAcl);
+
+        assertThat(configRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var configRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey(resourceKey)
+                        .setResourceValue(resourceValue)
+                        .build();
+
+        final var serializedConfigRuleCustom = serializer.serialize(configRuleCustom);
+
+        assertThat(serializedConfigRuleCustom)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var serializedConfigRuleCustom = serializer.serialize(expectedConfigRuleCustom);
+        final var configRuleCustom = serializer.deserialize(serializedConfigRuleCustom);
+
+        assertThat(configRuleCustom).usingRecursiveComparison().isEqualTo(expectedConfigRuleCustom);
+    }
+
     @Test
     void shouldSerializeConfigRule() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var expectedSerializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var expectedSerializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var expectedSerializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var expectedSerializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var expectedSerializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(expectedSerializedContextId)
+                        .setTopologyUuid(expectedSerializedTopologyIdUuid)
+                        .build();
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+
+        final var expectedSerializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(expectedSerializedTopologyId)
+                        .setDeviceId(expectedSerializedDeviceId)
+                        .setEndpointUuid(expectedSerializedEndPointIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var expectedSerializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedSerializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedSerializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(expectedSerializedAclMatch)
+                        .setAction(expectedSerializedAclAction)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var expectedSerializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(expectedSerializedAclEntry)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName",
+                        eu.teraflow.automation.acl.AclRuleTypeEnum.IPV4,
+                        "AclRuleDescription",
+                        "userId",
+                        List.of(aclEntry));
+
+        final var expectedSerializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(expectedSerializedEndPointId)
+                        .setRuleSet(expectedSerializedAclRuleSet)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
         final var expectedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setAcl(expectedSerializedConfigRuleAcl)
                         .build();
 
-        final var configRule = new ConfigRule(ConfigActionEnum.SET, "resourceKey", "resourceValue");
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl);
         final var serializedConfigRule = serializer.serialize(configRule);
 
-        assertThat(serializedConfigRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
+        assertThat(serializedConfigRule).isEqualTo(expectedConfigRule);
     }
 
     @Test
     void shouldDeserializeConfigRule() {
-        final var expectedConfigRule =
-                new ConfigRule(ConfigActionEnum.DELETE, "resourceKey", "resourceValue");
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var serializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var serializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var serializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var serializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedTopologyIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+        final var serializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointIdUuid)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var serializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(2)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(5)
+                        .setEndMplsLabel(10)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var serializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var serializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName",
+                        eu.teraflow.automation.acl.AclRuleTypeEnum.IPV4,
+                        "AclRuleDescription",
+                        "userId",
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(serializedAclEntry)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+        final var expectedConfigRule = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeAcl);
+
+        final var serializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
 
         final var serializedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setAcl(serializedConfigRuleAcl)
                         .build();
+
         final var configRule = serializer.deserialize(serializedConfigRule);
 
         assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
     }
 
     @Test
-    void shouldSerializeDeviceConfig() {
-        final var expectedConfigRuleA =
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConfigRule() {
+        final var serializedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedConfigRule));
+    }
+
+    private static Stream<Arguments> provideKpiSampleType() {
+        return Stream.of(
+                Arguments.of(
+                        KpiSampleType.PACKETS_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.PACKETS_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED),
+                Arguments.of(
+                        KpiSampleType.BYTES_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.BYTES_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED),
+                Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldSerializeKpiSampleType(
+            KpiSampleType kpiSampleType, KpiSampleTypes.KpiSampleType expectedSerializedType) {
+        final var serializedKpiSampleType = serializer.serialize(kpiSampleType);
+
+        assertThat(serializedKpiSampleType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldDeserializeKpiSampleType(
+            KpiSampleType expectedKpiSampleType, KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        final var kpiSampleType = serializer.deserialize(serializedKpiSampleType);
+
+        assertThat(kpiSampleType).isEqualTo(expectedKpiSampleType);
+    }
+
+    private static Stream<Arguments> provideDeviceDriverEnum() {
+        return Stream.of(
+                Arguments.of(
+                        DeviceDriverEnum.OPENCONFIG,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG),
+                Arguments.of(
+                        DeviceDriverEnum.TRANSPORT_API,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API),
+                Arguments.of(DeviceDriverEnum.P4, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4),
+                Arguments.of(
+                        DeviceDriverEnum.IETF_NETWORK_TOPOLOGY,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY),
+                Arguments.of(
+                        DeviceDriverEnum.ONF_TR_352,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
+                Arguments.of(
+                        DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldSerializeDeviceDriverEnum(
+            DeviceDriverEnum deviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum expectedDeviceDriverEnum) {
+        final var serializedDeviceDriverEnum = serializer.serialize(deviceDriverEnum);
+
+        assertThat(serializedDeviceDriverEnum.getNumber())
+                .isEqualTo(expectedDeviceDriverEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldDeserializeDeviceDriverEnum(
+            DeviceDriverEnum expectedDeviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        final var deviceDriverEnum = serializer.deserialize(serializedDeviceDriverEnum);
+
+        assertThat(deviceDriverEnum).isEqualTo(expectedDeviceDriverEnum);
+    }
+
+    @Test
+    void shouldSerializeDeviceConfig() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
                         .setResourceKey("resourceKeyA")
                         .setResourceValue("resourceValueA")
                         .build();
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
+        final var expectedConfigRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
+        final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleA =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedConfigRuleCustomA)
+                        .build();
         final var expectedConfigRuleB =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKeyB")
-                        .setResourceValue("resourceValueB")
+                        .setCustom(expectedConfigRuleCustomB)
                         .build();
+
         final var expectedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder()
                         .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB))
                         .build();
 
-        final var configRuleA = new ConfigRule(ConfigActionEnum.SET, "resourceKeyA", "resourceValueA");
-        final var configRuleB =
-                new ConfigRule(ConfigActionEnum.DELETE, "resourceKeyB", "resourceValueB");
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB);
+
+        final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA);
+        final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB);
+
         final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB));
         final var serializedDeviceConfig = serializer.serialize(deviceConfig);
 
-        assertThat(serializedDeviceConfig).usingRecursiveComparison().isEqualTo(expectedDeviceConfig);
+        assertThat(serializedDeviceConfig).isEqualTo(expectedDeviceConfig);
     }
 
     @Test
     void shouldDeserializeDeviceConfig() {
-        final var expectedConfigRuleA =
-                new ConfigRule(ConfigActionEnum.SET, "resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA);
+        final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB);
+
+        final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA);
         final var expectedConfigRuleB =
-                new ConfigRule(ConfigActionEnum.DELETE, "resourceKeyB", "resourceValueB");
+                new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB);
+
         final var expectedDeviceConfig =
                 new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB));
 
+        final var configRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+
+        final var configRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
         final var configRuleA =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
-                        .setResourceKey("resourceKeyA")
-                        .setResourceValue("resourceValueA")
+                        .setCustom(configRuleCustomA)
                         .build();
         final var configRuleB =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKeyB")
-                        .setResourceValue("resourceValueB")
+                        .setCustom(configRuleCustomB)
                         .build();
         final var serializedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder()
@@ -435,60 +1196,254 @@ class SerializerTest {
         assertThat(operationalStatus).isEqualTo(expectedOpStatus);
     }
 
+    @Test
+    void shouldSerializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var location = new Location(locationTypeRegion);
+
+        final var expectedLocation = ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var expectedLocation = new Location(locationTypeRegion);
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldSerializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var location = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var expectedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var expectedLocation = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedLocation() {
+        final var serializedLocation = ContextOuterClass.Location.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedLocation));
+    }
+
     @Test
     void shouldSerializeDevice() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
         final var expectedConfigRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setCustom(expectedConfigRuleCustomA)
                         .build();
+
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         final var expectedDeviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build();
-        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
 
         final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
+
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
 
         deviceBuilder.setDeviceId(serializedDeviceId);
         deviceBuilder.setDeviceType("deviceType");
         deviceBuilder.setDeviceConfig(expectedDeviceConfig);
         deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
         final var expectedDevice = deviceBuilder.build();
 
-        final var deviceConfig =
-                new DeviceConfig(
-                        List.of(new ConfigRule(ConfigActionEnum.SET, "resourceKey", "resourceValue")));
         final var device =
-                new Device("deviceId", "deviceType", deviceConfig, DeviceOperationalStatus.ENABLED);
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        deviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
         final var serializedDevice = serializer.serialize(device);
 
-        assertThat(serializedDevice).usingRecursiveComparison().isEqualTo(expectedDevice);
+        assertThat(serializedDevice).isEqualTo(expectedDevice);
     }
 
     @Test
     void shouldDeserializeDevice() {
+        final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+
         final var expectedConfig =
-                new DeviceConfig(
-                        List.of(new ConfigRule(ConfigActionEnum.DELETE, "resourceKey", "resourceValue")));
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.DELETE, configRuleType)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        final var endPoints = List.of(endPointA, endPointB);
+
         final var expectedDevice =
-                new Device("deviceId", "deviceType", expectedConfig, DeviceOperationalStatus.ENABLED);
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        expectedConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
 
         final var configRule =
                 ContextOuterClass.ConfigRule.newBuilder()
                         .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
-                        .setResourceKey("resourceKey")
-                        .setResourceValue("resourceValue")
+                        .setCustom(expectedConfigRuleCustom)
                         .build();
         final var deviceConfig =
                 ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build();
 
         final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDeviceOperationalStatus =
+                serializer.serialize(DeviceOperationalStatus.ENABLED);
+
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
 
         final var deviceBuilder = ContextOuterClass.Device.newBuilder();
         deviceBuilder.setDeviceId(serializedDeviceId);
         deviceBuilder.setDeviceType("deviceType");
         deviceBuilder.setDeviceConfig(deviceConfig);
-        deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
+        deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
         final var serializedDevice = deviceBuilder.build();
         final var device = serializer.deserialize(serializedDevice);
 
diff --git a/src/automation/target/generated-sources/grpc/acl/Acl.java b/src/automation/target/generated-sources/grpc/acl/Acl.java
new file mode 100644
index 0000000000000000000000000000000000000000..521294eefdec36b373b99aaca5281be28e01d2db
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/acl/Acl.java
@@ -0,0 +1,4654 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: acl.proto
+
+package acl;
+
+public final class Acl {
+  private Acl() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  /**
+   * Protobuf enum {@code acl.AclRuleTypeEnum}
+   */
+  public enum AclRuleTypeEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>ACLRULETYPE_UNDEFINED = 0;</code>
+     */
+    ACLRULETYPE_UNDEFINED(0),
+    /**
+     * <code>ACLRULETYPE_IPV4 = 1;</code>
+     */
+    ACLRULETYPE_IPV4(1),
+    /**
+     * <code>ACLRULETYPE_IPV6 = 2;</code>
+     */
+    ACLRULETYPE_IPV6(2),
+    /**
+     * <code>ACLRULETYPE_L2 = 3;</code>
+     */
+    ACLRULETYPE_L2(3),
+    /**
+     * <code>ACLRULETYPE_MPLS = 4;</code>
+     */
+    ACLRULETYPE_MPLS(4),
+    /**
+     * <code>ACLRULETYPE_MIXED = 5;</code>
+     */
+    ACLRULETYPE_MIXED(5),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>ACLRULETYPE_UNDEFINED = 0;</code>
+     */
+    public static final int ACLRULETYPE_UNDEFINED_VALUE = 0;
+    /**
+     * <code>ACLRULETYPE_IPV4 = 1;</code>
+     */
+    public static final int ACLRULETYPE_IPV4_VALUE = 1;
+    /**
+     * <code>ACLRULETYPE_IPV6 = 2;</code>
+     */
+    public static final int ACLRULETYPE_IPV6_VALUE = 2;
+    /**
+     * <code>ACLRULETYPE_L2 = 3;</code>
+     */
+    public static final int ACLRULETYPE_L2_VALUE = 3;
+    /**
+     * <code>ACLRULETYPE_MPLS = 4;</code>
+     */
+    public static final int ACLRULETYPE_MPLS_VALUE = 4;
+    /**
+     * <code>ACLRULETYPE_MIXED = 5;</code>
+     */
+    public static final int ACLRULETYPE_MIXED_VALUE = 5;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static AclRuleTypeEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static AclRuleTypeEnum forNumber(int value) {
+      switch (value) {
+        case 0: return ACLRULETYPE_UNDEFINED;
+        case 1: return ACLRULETYPE_IPV4;
+        case 2: return ACLRULETYPE_IPV6;
+        case 3: return ACLRULETYPE_L2;
+        case 4: return ACLRULETYPE_MPLS;
+        case 5: return ACLRULETYPE_MIXED;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<AclRuleTypeEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        AclRuleTypeEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<AclRuleTypeEnum>() {
+            public AclRuleTypeEnum findValueByNumber(int number) {
+              return AclRuleTypeEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return acl.Acl.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final AclRuleTypeEnum[] VALUES = values();
+
+    public static AclRuleTypeEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private AclRuleTypeEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:acl.AclRuleTypeEnum)
+  }
+
+  /**
+   * Protobuf enum {@code acl.AclForwardActionEnum}
+   */
+  public enum AclForwardActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>ACLFORWARDINGACTION_UNDEFINED = 0;</code>
+     */
+    ACLFORWARDINGACTION_UNDEFINED(0),
+    /**
+     * <code>ACLFORWARDINGACTION_DROP = 1;</code>
+     */
+    ACLFORWARDINGACTION_DROP(1),
+    /**
+     * <code>ACLFORWARDINGACTION_ACCEPT = 2;</code>
+     */
+    ACLFORWARDINGACTION_ACCEPT(2),
+    /**
+     * <code>ACLFORWARDINGACTION_REJECT = 3;</code>
+     */
+    ACLFORWARDINGACTION_REJECT(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>ACLFORWARDINGACTION_UNDEFINED = 0;</code>
+     */
+    public static final int ACLFORWARDINGACTION_UNDEFINED_VALUE = 0;
+    /**
+     * <code>ACLFORWARDINGACTION_DROP = 1;</code>
+     */
+    public static final int ACLFORWARDINGACTION_DROP_VALUE = 1;
+    /**
+     * <code>ACLFORWARDINGACTION_ACCEPT = 2;</code>
+     */
+    public static final int ACLFORWARDINGACTION_ACCEPT_VALUE = 2;
+    /**
+     * <code>ACLFORWARDINGACTION_REJECT = 3;</code>
+     */
+    public static final int ACLFORWARDINGACTION_REJECT_VALUE = 3;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static AclForwardActionEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static AclForwardActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return ACLFORWARDINGACTION_UNDEFINED;
+        case 1: return ACLFORWARDINGACTION_DROP;
+        case 2: return ACLFORWARDINGACTION_ACCEPT;
+        case 3: return ACLFORWARDINGACTION_REJECT;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<AclForwardActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        AclForwardActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<AclForwardActionEnum>() {
+            public AclForwardActionEnum findValueByNumber(int number) {
+              return AclForwardActionEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return acl.Acl.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final AclForwardActionEnum[] VALUES = values();
+
+    public static AclForwardActionEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private AclForwardActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:acl.AclForwardActionEnum)
+  }
+
+  /**
+   * Protobuf enum {@code acl.AclLogActionEnum}
+   */
+  public enum AclLogActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>ACLLOGACTION_UNDEFINED = 0;</code>
+     */
+    ACLLOGACTION_UNDEFINED(0),
+    /**
+     * <code>ACLLOGACTION_NOLOG = 1;</code>
+     */
+    ACLLOGACTION_NOLOG(1),
+    /**
+     * <code>ACLLOGACTION_SYSLOG = 2;</code>
+     */
+    ACLLOGACTION_SYSLOG(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>ACLLOGACTION_UNDEFINED = 0;</code>
+     */
+    public static final int ACLLOGACTION_UNDEFINED_VALUE = 0;
+    /**
+     * <code>ACLLOGACTION_NOLOG = 1;</code>
+     */
+    public static final int ACLLOGACTION_NOLOG_VALUE = 1;
+    /**
+     * <code>ACLLOGACTION_SYSLOG = 2;</code>
+     */
+    public static final int ACLLOGACTION_SYSLOG_VALUE = 2;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static AclLogActionEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static AclLogActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return ACLLOGACTION_UNDEFINED;
+        case 1: return ACLLOGACTION_NOLOG;
+        case 2: return ACLLOGACTION_SYSLOG;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<AclLogActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        AclLogActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<AclLogActionEnum>() {
+            public AclLogActionEnum findValueByNumber(int number) {
+              return AclLogActionEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return acl.Acl.getDescriptor().getEnumTypes().get(2);
+    }
+
+    private static final AclLogActionEnum[] VALUES = values();
+
+    public static AclLogActionEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private AclLogActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:acl.AclLogActionEnum)
+  }
+
+  public interface AclMatchOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclMatch)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 dscp = 1;</code>
+     * @return The dscp.
+     */
+    int getDscp();
+
+    /**
+     * <code>uint32 protocol = 2;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The srcAddress.
+     */
+    java.lang.String getSrcAddress();
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The bytes for srcAddress.
+     */
+    com.google.protobuf.ByteString
+        getSrcAddressBytes();
+
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The dstAddress.
+     */
+    java.lang.String getDstAddress();
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The bytes for dstAddress.
+     */
+    com.google.protobuf.ByteString
+        getDstAddressBytes();
+
+    /**
+     * <code>uint32 src_port = 5;</code>
+     * @return The srcPort.
+     */
+    int getSrcPort();
+
+    /**
+     * <code>uint32 dst_port = 6;</code>
+     * @return The dstPort.
+     */
+    int getDstPort();
+
+    /**
+     * <code>uint32 start_mpls_label = 7;</code>
+     * @return The startMplsLabel.
+     */
+    int getStartMplsLabel();
+
+    /**
+     * <code>uint32 end_mpls_label = 8;</code>
+     * @return The endMplsLabel.
+     */
+    int getEndMplsLabel();
+  }
+  /**
+   * Protobuf type {@code acl.AclMatch}
+   */
+  public static final class AclMatch extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclMatch)
+      AclMatchOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclMatch.newBuilder() to construct.
+    private AclMatch(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclMatch() {
+      srcAddress_ = "";
+      dstAddress_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclMatch();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclMatch(
+        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 8: {
+
+              dscp_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              srcAddress_ = s;
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstAddress_ = s;
+              break;
+            }
+            case 40: {
+
+              srcPort_ = input.readUInt32();
+              break;
+            }
+            case 48: {
+
+              dstPort_ = input.readUInt32();
+              break;
+            }
+            case 56: {
+
+              startMplsLabel_ = input.readUInt32();
+              break;
+            }
+            case 64: {
+
+              endMplsLabel_ = input.readUInt32();
+              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 acl.Acl.internal_static_acl_AclMatch_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclMatch_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclMatch.class, acl.Acl.AclMatch.Builder.class);
+    }
+
+    public static final int DSCP_FIELD_NUMBER = 1;
+    private int dscp_;
+    /**
+     * <code>uint32 dscp = 1;</code>
+     * @return The dscp.
+     */
+    @java.lang.Override
+    public int getDscp() {
+      return dscp_;
+    }
+
+    public static final int PROTOCOL_FIELD_NUMBER = 2;
+    private int protocol_;
+    /**
+     * <code>uint32 protocol = 2;</code>
+     * @return The protocol.
+     */
+    @java.lang.Override
+    public int getProtocol() {
+      return protocol_;
+    }
+
+    public static final int SRC_ADDRESS_FIELD_NUMBER = 3;
+    private volatile java.lang.Object srcAddress_;
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The srcAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getSrcAddress() {
+      java.lang.Object ref = srcAddress_;
+      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();
+        srcAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string src_address = 3;</code>
+     * @return The bytes for srcAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getSrcAddressBytes() {
+      java.lang.Object ref = srcAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        srcAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DST_ADDRESS_FIELD_NUMBER = 4;
+    private volatile java.lang.Object dstAddress_;
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The dstAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getDstAddress() {
+      java.lang.Object ref = dstAddress_;
+      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();
+        dstAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string dst_address = 4;</code>
+     * @return The bytes for dstAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDstAddressBytes() {
+      java.lang.Object ref = dstAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        dstAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int SRC_PORT_FIELD_NUMBER = 5;
+    private int srcPort_;
+    /**
+     * <code>uint32 src_port = 5;</code>
+     * @return The srcPort.
+     */
+    @java.lang.Override
+    public int getSrcPort() {
+      return srcPort_;
+    }
+
+    public static final int DST_PORT_FIELD_NUMBER = 6;
+    private int dstPort_;
+    /**
+     * <code>uint32 dst_port = 6;</code>
+     * @return The dstPort.
+     */
+    @java.lang.Override
+    public int getDstPort() {
+      return dstPort_;
+    }
+
+    public static final int START_MPLS_LABEL_FIELD_NUMBER = 7;
+    private int startMplsLabel_;
+    /**
+     * <code>uint32 start_mpls_label = 7;</code>
+     * @return The startMplsLabel.
+     */
+    @java.lang.Override
+    public int getStartMplsLabel() {
+      return startMplsLabel_;
+    }
+
+    public static final int END_MPLS_LABEL_FIELD_NUMBER = 8;
+    private int endMplsLabel_;
+    /**
+     * <code>uint32 end_mpls_label = 8;</code>
+     * @return The endMplsLabel.
+     */
+    @java.lang.Override
+    public int getEndMplsLabel() {
+      return endMplsLabel_;
+    }
+
+    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 (dscp_ != 0) {
+        output.writeUInt32(1, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(2, protocol_);
+      }
+      if (!getSrcAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, srcAddress_);
+      }
+      if (!getDstAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, dstAddress_);
+      }
+      if (srcPort_ != 0) {
+        output.writeUInt32(5, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        output.writeUInt32(6, dstPort_);
+      }
+      if (startMplsLabel_ != 0) {
+        output.writeUInt32(7, startMplsLabel_);
+      }
+      if (endMplsLabel_ != 0) {
+        output.writeUInt32(8, endMplsLabel_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (dscp_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, dscp_);
+      }
+      if (protocol_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, protocol_);
+      }
+      if (!getSrcAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, srcAddress_);
+      }
+      if (!getDstAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, dstAddress_);
+      }
+      if (srcPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(6, dstPort_);
+      }
+      if (startMplsLabel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(7, startMplsLabel_);
+      }
+      if (endMplsLabel_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(8, endMplsLabel_);
+      }
+      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 acl.Acl.AclMatch)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclMatch other = (acl.Acl.AclMatch) obj;
+
+      if (getDscp()
+          != other.getDscp()) return false;
+      if (getProtocol()
+          != other.getProtocol()) return false;
+      if (!getSrcAddress()
+          .equals(other.getSrcAddress())) return false;
+      if (!getDstAddress()
+          .equals(other.getDstAddress())) return false;
+      if (getSrcPort()
+          != other.getSrcPort()) return false;
+      if (getDstPort()
+          != other.getDstPort()) return false;
+      if (getStartMplsLabel()
+          != other.getStartMplsLabel()) return false;
+      if (getEndMplsLabel()
+          != other.getEndMplsLabel()) 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();
+      hash = (37 * hash) + DSCP_FIELD_NUMBER;
+      hash = (53 * hash) + getDscp();
+      hash = (37 * hash) + PROTOCOL_FIELD_NUMBER;
+      hash = (53 * hash) + getProtocol();
+      hash = (37 * hash) + SRC_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getSrcAddress().hashCode();
+      hash = (37 * hash) + DST_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getDstAddress().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) + START_MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getStartMplsLabel();
+      hash = (37 * hash) + END_MPLS_LABEL_FIELD_NUMBER;
+      hash = (53 * hash) + getEndMplsLabel();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclMatch parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclMatch parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclMatch parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclMatch 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 acl.Acl.AclMatch parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclMatch 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 acl.Acl.AclMatch parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclMatch 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(acl.Acl.AclMatch 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 acl.AclMatch}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclMatch)
+        acl.Acl.AclMatchOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclMatch_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclMatch_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclMatch.class, acl.Acl.AclMatch.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclMatch.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();
+        dscp_ = 0;
+
+        protocol_ = 0;
+
+        srcAddress_ = "";
+
+        dstAddress_ = "";
+
+        srcPort_ = 0;
+
+        dstPort_ = 0;
+
+        startMplsLabel_ = 0;
+
+        endMplsLabel_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclMatch_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclMatch getDefaultInstanceForType() {
+        return acl.Acl.AclMatch.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclMatch build() {
+        acl.Acl.AclMatch result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclMatch buildPartial() {
+        acl.Acl.AclMatch result = new acl.Acl.AclMatch(this);
+        result.dscp_ = dscp_;
+        result.protocol_ = protocol_;
+        result.srcAddress_ = srcAddress_;
+        result.dstAddress_ = dstAddress_;
+        result.srcPort_ = srcPort_;
+        result.dstPort_ = dstPort_;
+        result.startMplsLabel_ = startMplsLabel_;
+        result.endMplsLabel_ = endMplsLabel_;
+        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 acl.Acl.AclMatch) {
+          return mergeFrom((acl.Acl.AclMatch)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclMatch other) {
+        if (other == acl.Acl.AclMatch.getDefaultInstance()) return this;
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
+        }
+        if (!other.getSrcAddress().isEmpty()) {
+          srcAddress_ = other.srcAddress_;
+          onChanged();
+        }
+        if (!other.getDstAddress().isEmpty()) {
+          dstAddress_ = other.dstAddress_;
+          onChanged();
+        }
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
+        }
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
+        }
+        if (other.getStartMplsLabel() != 0) {
+          setStartMplsLabel(other.getStartMplsLabel());
+        }
+        if (other.getEndMplsLabel() != 0) {
+          setEndMplsLabel(other.getEndMplsLabel());
+        }
+        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 {
+        acl.Acl.AclMatch parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclMatch) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int dscp_ ;
+      /**
+       * <code>uint32 dscp = 1;</code>
+       * @return The dscp.
+       */
+      @java.lang.Override
+      public int getDscp() {
+        return dscp_;
+      }
+      /**
+       * <code>uint32 dscp = 1;</code>
+       * @param value The dscp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDscp(int value) {
+        
+        dscp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 dscp = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDscp() {
+        
+        dscp_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int protocol_ ;
+      /**
+       * <code>uint32 protocol = 2;</code>
+       * @return The protocol.
+       */
+      @java.lang.Override
+      public int getProtocol() {
+        return protocol_;
+      }
+      /**
+       * <code>uint32 protocol = 2;</code>
+       * @param value The protocol to set.
+       * @return This builder for chaining.
+       */
+      public Builder setProtocol(int value) {
+        
+        protocol_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 protocol = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearProtocol() {
+        
+        protocol_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object srcAddress_ = "";
+      /**
+       * <code>string src_address = 3;</code>
+       * @return The srcAddress.
+       */
+      public java.lang.String getSrcAddress() {
+        java.lang.Object ref = srcAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          srcAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @return The bytes for srcAddress.
+       */
+      public com.google.protobuf.ByteString
+          getSrcAddressBytes() {
+        java.lang.Object ref = srcAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @param value The srcAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSrcAddress() {
+        
+        srcAddress_ = getDefaultInstance().getSrcAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string src_address = 3;</code>
+       * @param value The bytes for srcAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object dstAddress_ = "";
+      /**
+       * <code>string dst_address = 4;</code>
+       * @return The dstAddress.
+       */
+      public java.lang.String getDstAddress() {
+        java.lang.Object ref = dstAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          dstAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @return The bytes for dstAddress.
+       */
+      public com.google.protobuf.ByteString
+          getDstAddressBytes() {
+        java.lang.Object ref = dstAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          dstAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @param value The dstAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstAddress() {
+        
+        dstAddress_ = getDefaultInstance().getDstAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string dst_address = 4;</code>
+       * @param value The bytes for dstAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int srcPort_ ;
+      /**
+       * <code>uint32 src_port = 5;</code>
+       * @return The srcPort.
+       */
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
+      }
+      /**
+       * <code>uint32 src_port = 5;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 src_port = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int dstPort_ ;
+      /**
+       * <code>uint32 dst_port = 6;</code>
+       * @return The dstPort.
+       */
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
+      }
+      /**
+       * <code>uint32 dst_port = 6;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 dst_port = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDstPort() {
+        
+        dstPort_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int startMplsLabel_ ;
+      /**
+       * <code>uint32 start_mpls_label = 7;</code>
+       * @return The startMplsLabel.
+       */
+      @java.lang.Override
+      public int getStartMplsLabel() {
+        return startMplsLabel_;
+      }
+      /**
+       * <code>uint32 start_mpls_label = 7;</code>
+       * @param value The startMplsLabel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartMplsLabel(int value) {
+        
+        startMplsLabel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 start_mpls_label = 7;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearStartMplsLabel() {
+        
+        startMplsLabel_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int endMplsLabel_ ;
+      /**
+       * <code>uint32 end_mpls_label = 8;</code>
+       * @return The endMplsLabel.
+       */
+      @java.lang.Override
+      public int getEndMplsLabel() {
+        return endMplsLabel_;
+      }
+      /**
+       * <code>uint32 end_mpls_label = 8;</code>
+       * @param value The endMplsLabel to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndMplsLabel(int value) {
+        
+        endMplsLabel_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 end_mpls_label = 8;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndMplsLabel() {
+        
+        endMplsLabel_ = 0;
+        onChanged();
+        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);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:acl.AclMatch)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclMatch)
+    private static final acl.Acl.AclMatch DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclMatch();
+    }
+
+    public static acl.Acl.AclMatch getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclMatch>
+        PARSER = new com.google.protobuf.AbstractParser<AclMatch>() {
+      @java.lang.Override
+      public AclMatch parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclMatch(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclMatch> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclMatch> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclMatch getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AclActionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclAction)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The enum numeric value on the wire for forwardAction.
+     */
+    int getForwardActionValue();
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The forwardAction.
+     */
+    acl.Acl.AclForwardActionEnum getForwardAction();
+
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The enum numeric value on the wire for logAction.
+     */
+    int getLogActionValue();
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The logAction.
+     */
+    acl.Acl.AclLogActionEnum getLogAction();
+  }
+  /**
+   * Protobuf type {@code acl.AclAction}
+   */
+  public static final class AclAction extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclAction)
+      AclActionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclAction.newBuilder() to construct.
+    private AclAction(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclAction() {
+      forwardAction_ = 0;
+      logAction_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclAction();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclAction(
+        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 8: {
+              int rawValue = input.readEnum();
+
+              forwardAction_ = rawValue;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              logAction_ = rawValue;
+              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 acl.Acl.internal_static_acl_AclAction_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclAction_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclAction.class, acl.Acl.AclAction.Builder.class);
+    }
+
+    public static final int FORWARD_ACTION_FIELD_NUMBER = 1;
+    private int forwardAction_;
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The enum numeric value on the wire for forwardAction.
+     */
+    @java.lang.Override public int getForwardActionValue() {
+      return forwardAction_;
+    }
+    /**
+     * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+     * @return The forwardAction.
+     */
+    @java.lang.Override public acl.Acl.AclForwardActionEnum getForwardAction() {
+      @SuppressWarnings("deprecation")
+      acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.valueOf(forwardAction_);
+      return result == null ? acl.Acl.AclForwardActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int LOG_ACTION_FIELD_NUMBER = 2;
+    private int logAction_;
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The enum numeric value on the wire for logAction.
+     */
+    @java.lang.Override public int getLogActionValue() {
+      return logAction_;
+    }
+    /**
+     * <code>.acl.AclLogActionEnum log_action = 2;</code>
+     * @return The logAction.
+     */
+    @java.lang.Override public acl.Acl.AclLogActionEnum getLogAction() {
+      @SuppressWarnings("deprecation")
+      acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.valueOf(logAction_);
+      return result == null ? acl.Acl.AclLogActionEnum.UNRECOGNIZED : result;
+    }
+
+    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 (forwardAction_ != acl.Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, forwardAction_);
+      }
+      if (logAction_ != acl.Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(2, logAction_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (forwardAction_ != acl.Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, forwardAction_);
+      }
+      if (logAction_ != acl.Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, logAction_);
+      }
+      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 acl.Acl.AclAction)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclAction other = (acl.Acl.AclAction) obj;
+
+      if (forwardAction_ != other.forwardAction_) return false;
+      if (logAction_ != other.logAction_) 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();
+      hash = (37 * hash) + FORWARD_ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + forwardAction_;
+      hash = (37 * hash) + LOG_ACTION_FIELD_NUMBER;
+      hash = (53 * hash) + logAction_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclAction parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclAction parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclAction parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclAction 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 acl.Acl.AclAction parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclAction 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 acl.Acl.AclAction parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclAction 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(acl.Acl.AclAction 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 acl.AclAction}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclAction)
+        acl.Acl.AclActionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclAction_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclAction_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclAction.class, acl.Acl.AclAction.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclAction.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();
+        forwardAction_ = 0;
+
+        logAction_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclAction_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclAction getDefaultInstanceForType() {
+        return acl.Acl.AclAction.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclAction build() {
+        acl.Acl.AclAction result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclAction buildPartial() {
+        acl.Acl.AclAction result = new acl.Acl.AclAction(this);
+        result.forwardAction_ = forwardAction_;
+        result.logAction_ = logAction_;
+        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 acl.Acl.AclAction) {
+          return mergeFrom((acl.Acl.AclAction)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclAction other) {
+        if (other == acl.Acl.AclAction.getDefaultInstance()) return this;
+        if (other.forwardAction_ != 0) {
+          setForwardActionValue(other.getForwardActionValue());
+        }
+        if (other.logAction_ != 0) {
+          setLogActionValue(other.getLogActionValue());
+        }
+        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 {
+        acl.Acl.AclAction parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclAction) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int forwardAction_ = 0;
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @return The enum numeric value on the wire for forwardAction.
+       */
+      @java.lang.Override public int getForwardActionValue() {
+        return forwardAction_;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @param value The enum numeric value on the wire for forwardAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setForwardActionValue(int value) {
+        
+        forwardAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @return The forwardAction.
+       */
+      @java.lang.Override
+      public acl.Acl.AclForwardActionEnum getForwardAction() {
+        @SuppressWarnings("deprecation")
+        acl.Acl.AclForwardActionEnum result = acl.Acl.AclForwardActionEnum.valueOf(forwardAction_);
+        return result == null ? acl.Acl.AclForwardActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @param value The forwardAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setForwardAction(acl.Acl.AclForwardActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        forwardAction_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclForwardActionEnum forward_action = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearForwardAction() {
+        
+        forwardAction_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private int logAction_ = 0;
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @return The enum numeric value on the wire for logAction.
+       */
+      @java.lang.Override public int getLogActionValue() {
+        return logAction_;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @param value The enum numeric value on the wire for logAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLogActionValue(int value) {
+        
+        logAction_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @return The logAction.
+       */
+      @java.lang.Override
+      public acl.Acl.AclLogActionEnum getLogAction() {
+        @SuppressWarnings("deprecation")
+        acl.Acl.AclLogActionEnum result = acl.Acl.AclLogActionEnum.valueOf(logAction_);
+        return result == null ? acl.Acl.AclLogActionEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @param value The logAction to set.
+       * @return This builder for chaining.
+       */
+      public Builder setLogAction(acl.Acl.AclLogActionEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        logAction_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclLogActionEnum log_action = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearLogAction() {
+        
+        logAction_ = 0;
+        onChanged();
+        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);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:acl.AclAction)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclAction)
+    private static final acl.Acl.AclAction DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclAction();
+    }
+
+    public static acl.Acl.AclAction getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclAction>
+        PARSER = new com.google.protobuf.AbstractParser<AclAction>() {
+      @java.lang.Override
+      public AclAction parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclAction(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclAction> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclAction> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclAction getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AclEntryOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclEntry)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>uint32 sequence_id = 1;</code>
+     * @return The sequenceId.
+     */
+    int getSequenceId();
+
+    /**
+     * <code>string description = 2;</code>
+     * @return The description.
+     */
+    java.lang.String getDescription();
+    /**
+     * <code>string description = 2;</code>
+     * @return The bytes for description.
+     */
+    com.google.protobuf.ByteString
+        getDescriptionBytes();
+
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return Whether the match field is set.
+     */
+    boolean hasMatch();
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return The match.
+     */
+    acl.Acl.AclMatch getMatch();
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     */
+    acl.Acl.AclMatchOrBuilder getMatchOrBuilder();
+
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return Whether the action field is set.
+     */
+    boolean hasAction();
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return The action.
+     */
+    acl.Acl.AclAction getAction();
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     */
+    acl.Acl.AclActionOrBuilder getActionOrBuilder();
+  }
+  /**
+   * Protobuf type {@code acl.AclEntry}
+   */
+  public static final class AclEntry extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclEntry)
+      AclEntryOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclEntry.newBuilder() to construct.
+    private AclEntry(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclEntry() {
+      description_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclEntry();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclEntry(
+        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 8: {
+
+              sequenceId_ = input.readUInt32();
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              description_ = s;
+              break;
+            }
+            case 26: {
+              acl.Acl.AclMatch.Builder subBuilder = null;
+              if (match_ != null) {
+                subBuilder = match_.toBuilder();
+              }
+              match_ = input.readMessage(acl.Acl.AclMatch.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(match_);
+                match_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 34: {
+              acl.Acl.AclAction.Builder subBuilder = null;
+              if (action_ != null) {
+                subBuilder = action_.toBuilder();
+              }
+              action_ = input.readMessage(acl.Acl.AclAction.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(action_);
+                action_ = 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 acl.Acl.internal_static_acl_AclEntry_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclEntry_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclEntry.class, acl.Acl.AclEntry.Builder.class);
+    }
+
+    public static final int SEQUENCE_ID_FIELD_NUMBER = 1;
+    private int sequenceId_;
+    /**
+     * <code>uint32 sequence_id = 1;</code>
+     * @return The sequenceId.
+     */
+    @java.lang.Override
+    public int getSequenceId() {
+      return sequenceId_;
+    }
+
+    public static final int DESCRIPTION_FIELD_NUMBER = 2;
+    private volatile java.lang.Object description_;
+    /**
+     * <code>string description = 2;</code>
+     * @return The description.
+     */
+    @java.lang.Override
+    public java.lang.String getDescription() {
+      java.lang.Object ref = description_;
+      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();
+        description_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string description = 2;</code>
+     * @return The bytes for description.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDescriptionBytes() {
+      java.lang.Object ref = description_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        description_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int MATCH_FIELD_NUMBER = 3;
+    private acl.Acl.AclMatch match_;
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return Whether the match field is set.
+     */
+    @java.lang.Override
+    public boolean hasMatch() {
+      return match_ != null;
+    }
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     * @return The match.
+     */
+    @java.lang.Override
+    public acl.Acl.AclMatch getMatch() {
+      return match_ == null ? acl.Acl.AclMatch.getDefaultInstance() : match_;
+    }
+    /**
+     * <code>.acl.AclMatch match = 3;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclMatchOrBuilder getMatchOrBuilder() {
+      return getMatch();
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 4;
+    private acl.Acl.AclAction action_;
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return Whether the action field is set.
+     */
+    @java.lang.Override
+    public boolean hasAction() {
+      return action_ != null;
+    }
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     * @return The action.
+     */
+    @java.lang.Override
+    public acl.Acl.AclAction getAction() {
+      return action_ == null ? acl.Acl.AclAction.getDefaultInstance() : action_;
+    }
+    /**
+     * <code>.acl.AclAction action = 4;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclActionOrBuilder getActionOrBuilder() {
+      return getAction();
+    }
+
+    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 (sequenceId_ != 0) {
+        output.writeUInt32(1, sequenceId_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_);
+      }
+      if (match_ != null) {
+        output.writeMessage(3, getMatch());
+      }
+      if (action_ != null) {
+        output.writeMessage(4, getAction());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (sequenceId_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(1, sequenceId_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_);
+      }
+      if (match_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getMatch());
+      }
+      if (action_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getAction());
+      }
+      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 acl.Acl.AclEntry)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclEntry other = (acl.Acl.AclEntry) obj;
+
+      if (getSequenceId()
+          != other.getSequenceId()) return false;
+      if (!getDescription()
+          .equals(other.getDescription())) return false;
+      if (hasMatch() != other.hasMatch()) return false;
+      if (hasMatch()) {
+        if (!getMatch()
+            .equals(other.getMatch())) return false;
+      }
+      if (hasAction() != other.hasAction()) return false;
+      if (hasAction()) {
+        if (!getAction()
+            .equals(other.getAction())) 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();
+      hash = (37 * hash) + SEQUENCE_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getSequenceId();
+      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getDescription().hashCode();
+      if (hasMatch()) {
+        hash = (37 * hash) + MATCH_FIELD_NUMBER;
+        hash = (53 * hash) + getMatch().hashCode();
+      }
+      if (hasAction()) {
+        hash = (37 * hash) + ACTION_FIELD_NUMBER;
+        hash = (53 * hash) + getAction().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclEntry parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclEntry parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclEntry parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclEntry 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 acl.Acl.AclEntry parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclEntry 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 acl.Acl.AclEntry parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclEntry 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(acl.Acl.AclEntry 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 acl.AclEntry}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclEntry)
+        acl.Acl.AclEntryOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclEntry_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclEntry_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclEntry.class, acl.Acl.AclEntry.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclEntry.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();
+        sequenceId_ = 0;
+
+        description_ = "";
+
+        if (matchBuilder_ == null) {
+          match_ = null;
+        } else {
+          match_ = null;
+          matchBuilder_ = null;
+        }
+        if (actionBuilder_ == null) {
+          action_ = null;
+        } else {
+          action_ = null;
+          actionBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclEntry_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclEntry getDefaultInstanceForType() {
+        return acl.Acl.AclEntry.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclEntry build() {
+        acl.Acl.AclEntry result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclEntry buildPartial() {
+        acl.Acl.AclEntry result = new acl.Acl.AclEntry(this);
+        result.sequenceId_ = sequenceId_;
+        result.description_ = description_;
+        if (matchBuilder_ == null) {
+          result.match_ = match_;
+        } else {
+          result.match_ = matchBuilder_.build();
+        }
+        if (actionBuilder_ == null) {
+          result.action_ = action_;
+        } else {
+          result.action_ = actionBuilder_.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 acl.Acl.AclEntry) {
+          return mergeFrom((acl.Acl.AclEntry)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclEntry other) {
+        if (other == acl.Acl.AclEntry.getDefaultInstance()) return this;
+        if (other.getSequenceId() != 0) {
+          setSequenceId(other.getSequenceId());
+        }
+        if (!other.getDescription().isEmpty()) {
+          description_ = other.description_;
+          onChanged();
+        }
+        if (other.hasMatch()) {
+          mergeMatch(other.getMatch());
+        }
+        if (other.hasAction()) {
+          mergeAction(other.getAction());
+        }
+        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 {
+        acl.Acl.AclEntry parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclEntry) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int sequenceId_ ;
+      /**
+       * <code>uint32 sequence_id = 1;</code>
+       * @return The sequenceId.
+       */
+      @java.lang.Override
+      public int getSequenceId() {
+        return sequenceId_;
+      }
+      /**
+       * <code>uint32 sequence_id = 1;</code>
+       * @param value The sequenceId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setSequenceId(int value) {
+        
+        sequenceId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 sequence_id = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSequenceId() {
+        
+        sequenceId_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object description_ = "";
+      /**
+       * <code>string description = 2;</code>
+       * @return The description.
+       */
+      public java.lang.String getDescription() {
+        java.lang.Object ref = description_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          description_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @return The bytes for description.
+       */
+      public com.google.protobuf.ByteString
+          getDescriptionBytes() {
+        java.lang.Object ref = description_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          description_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @param value The description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        description_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDescription() {
+        
+        description_ = getDefaultInstance().getDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 2;</code>
+       * @param value The bytes for description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        description_ = value;
+        onChanged();
+        return this;
+      }
+
+      private acl.Acl.AclMatch match_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclMatch, acl.Acl.AclMatch.Builder, acl.Acl.AclMatchOrBuilder> matchBuilder_;
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       * @return Whether the match field is set.
+       */
+      public boolean hasMatch() {
+        return matchBuilder_ != null || match_ != null;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       * @return The match.
+       */
+      public acl.Acl.AclMatch getMatch() {
+        if (matchBuilder_ == null) {
+          return match_ == null ? acl.Acl.AclMatch.getDefaultInstance() : match_;
+        } else {
+          return matchBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder setMatch(acl.Acl.AclMatch value) {
+        if (matchBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          match_ = value;
+          onChanged();
+        } else {
+          matchBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder setMatch(
+          acl.Acl.AclMatch.Builder builderForValue) {
+        if (matchBuilder_ == null) {
+          match_ = builderForValue.build();
+          onChanged();
+        } else {
+          matchBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder mergeMatch(acl.Acl.AclMatch value) {
+        if (matchBuilder_ == null) {
+          if (match_ != null) {
+            match_ =
+              acl.Acl.AclMatch.newBuilder(match_).mergeFrom(value).buildPartial();
+          } else {
+            match_ = value;
+          }
+          onChanged();
+        } else {
+          matchBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public Builder clearMatch() {
+        if (matchBuilder_ == null) {
+          match_ = null;
+          onChanged();
+        } else {
+          match_ = null;
+          matchBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public acl.Acl.AclMatch.Builder getMatchBuilder() {
+        
+        onChanged();
+        return getMatchFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      public acl.Acl.AclMatchOrBuilder getMatchOrBuilder() {
+        if (matchBuilder_ != null) {
+          return matchBuilder_.getMessageOrBuilder();
+        } else {
+          return match_ == null ?
+              acl.Acl.AclMatch.getDefaultInstance() : match_;
+        }
+      }
+      /**
+       * <code>.acl.AclMatch match = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclMatch, acl.Acl.AclMatch.Builder, acl.Acl.AclMatchOrBuilder> 
+          getMatchFieldBuilder() {
+        if (matchBuilder_ == null) {
+          matchBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclMatch, acl.Acl.AclMatch.Builder, acl.Acl.AclMatchOrBuilder>(
+                  getMatch(),
+                  getParentForChildren(),
+                  isClean());
+          match_ = null;
+        }
+        return matchBuilder_;
+      }
+
+      private acl.Acl.AclAction action_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclAction, acl.Acl.AclAction.Builder, acl.Acl.AclActionOrBuilder> actionBuilder_;
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       * @return Whether the action field is set.
+       */
+      public boolean hasAction() {
+        return actionBuilder_ != null || action_ != null;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       * @return The action.
+       */
+      public acl.Acl.AclAction getAction() {
+        if (actionBuilder_ == null) {
+          return action_ == null ? acl.Acl.AclAction.getDefaultInstance() : action_;
+        } else {
+          return actionBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder setAction(acl.Acl.AclAction value) {
+        if (actionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          action_ = value;
+          onChanged();
+        } else {
+          actionBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder setAction(
+          acl.Acl.AclAction.Builder builderForValue) {
+        if (actionBuilder_ == null) {
+          action_ = builderForValue.build();
+          onChanged();
+        } else {
+          actionBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder mergeAction(acl.Acl.AclAction value) {
+        if (actionBuilder_ == null) {
+          if (action_ != null) {
+            action_ =
+              acl.Acl.AclAction.newBuilder(action_).mergeFrom(value).buildPartial();
+          } else {
+            action_ = value;
+          }
+          onChanged();
+        } else {
+          actionBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public Builder clearAction() {
+        if (actionBuilder_ == null) {
+          action_ = null;
+          onChanged();
+        } else {
+          action_ = null;
+          actionBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public acl.Acl.AclAction.Builder getActionBuilder() {
+        
+        onChanged();
+        return getActionFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      public acl.Acl.AclActionOrBuilder getActionOrBuilder() {
+        if (actionBuilder_ != null) {
+          return actionBuilder_.getMessageOrBuilder();
+        } else {
+          return action_ == null ?
+              acl.Acl.AclAction.getDefaultInstance() : action_;
+        }
+      }
+      /**
+       * <code>.acl.AclAction action = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          acl.Acl.AclAction, acl.Acl.AclAction.Builder, acl.Acl.AclActionOrBuilder> 
+          getActionFieldBuilder() {
+        if (actionBuilder_ == null) {
+          actionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              acl.Acl.AclAction, acl.Acl.AclAction.Builder, acl.Acl.AclActionOrBuilder>(
+                  getAction(),
+                  getParentForChildren(),
+                  isClean());
+          action_ = null;
+        }
+        return actionBuilder_;
+      }
+      @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:acl.AclEntry)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclEntry)
+    private static final acl.Acl.AclEntry DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclEntry();
+    }
+
+    public static acl.Acl.AclEntry getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclEntry>
+        PARSER = new com.google.protobuf.AbstractParser<AclEntry>() {
+      @java.lang.Override
+      public AclEntry parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclEntry(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclEntry> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclEntry> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclEntry getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AclRuleSetOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:acl.AclRuleSet)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string name = 1;</code>
+     * @return The name.
+     */
+    java.lang.String getName();
+    /**
+     * <code>string name = 1;</code>
+     * @return The bytes for name.
+     */
+    com.google.protobuf.ByteString
+        getNameBytes();
+
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The enum numeric value on the wire for type.
+     */
+    int getTypeValue();
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The type.
+     */
+    acl.Acl.AclRuleTypeEnum getType();
+
+    /**
+     * <code>string description = 3;</code>
+     * @return The description.
+     */
+    java.lang.String getDescription();
+    /**
+     * <code>string description = 3;</code>
+     * @return The bytes for description.
+     */
+    com.google.protobuf.ByteString
+        getDescriptionBytes();
+
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The userId.
+     */
+    java.lang.String getUserId();
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The bytes for userId.
+     */
+    com.google.protobuf.ByteString
+        getUserIdBytes();
+
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    java.util.List<acl.Acl.AclEntry> 
+        getEntriesList();
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    acl.Acl.AclEntry getEntries(int index);
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    int getEntriesCount();
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    java.util.List<? extends acl.Acl.AclEntryOrBuilder> 
+        getEntriesOrBuilderList();
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    acl.Acl.AclEntryOrBuilder getEntriesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code acl.AclRuleSet}
+   */
+  public static final class AclRuleSet extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:acl.AclRuleSet)
+      AclRuleSetOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AclRuleSet.newBuilder() to construct.
+    private AclRuleSet(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AclRuleSet() {
+      name_ = "";
+      type_ = 0;
+      description_ = "";
+      userId_ = "";
+      entries_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AclRuleSet();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AclRuleSet(
+        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: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              name_ = s;
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              type_ = rawValue;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              description_ = s;
+              break;
+            }
+            case 34: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              userId_ = s;
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                entries_ = new java.util.ArrayList<acl.Acl.AclEntry>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              entries_.add(
+                  input.readMessage(acl.Acl.AclEntry.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)) {
+          entries_ = java.util.Collections.unmodifiableList(entries_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return acl.Acl.internal_static_acl_AclRuleSet_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              acl.Acl.AclRuleSet.class, acl.Acl.AclRuleSet.Builder.class);
+    }
+
+    public static final int NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object name_;
+    /**
+     * <code>string name = 1;</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 = 1;</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 TYPE_FIELD_NUMBER = 2;
+    private int type_;
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The enum numeric value on the wire for type.
+     */
+    @java.lang.Override public int getTypeValue() {
+      return type_;
+    }
+    /**
+     * <code>.acl.AclRuleTypeEnum type = 2;</code>
+     * @return The type.
+     */
+    @java.lang.Override public acl.Acl.AclRuleTypeEnum getType() {
+      @SuppressWarnings("deprecation")
+      acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.valueOf(type_);
+      return result == null ? acl.Acl.AclRuleTypeEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int DESCRIPTION_FIELD_NUMBER = 3;
+    private volatile java.lang.Object description_;
+    /**
+     * <code>string description = 3;</code>
+     * @return The description.
+     */
+    @java.lang.Override
+    public java.lang.String getDescription() {
+      java.lang.Object ref = description_;
+      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();
+        description_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string description = 3;</code>
+     * @return The bytes for description.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDescriptionBytes() {
+      java.lang.Object ref = description_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        description_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int USER_ID_FIELD_NUMBER = 4;
+    private volatile java.lang.Object userId_;
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The userId.
+     */
+    @java.lang.Override
+    public java.lang.String getUserId() {
+      java.lang.Object ref = userId_;
+      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();
+        userId_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string user_id = 4;</code>
+     * @return The bytes for userId.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUserIdBytes() {
+      java.lang.Object ref = userId_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        userId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int ENTRIES_FIELD_NUMBER = 5;
+    private java.util.List<acl.Acl.AclEntry> entries_;
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<acl.Acl.AclEntry> getEntriesList() {
+      return entries_;
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends acl.Acl.AclEntryOrBuilder> 
+        getEntriesOrBuilderList() {
+      return entries_;
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public int getEntriesCount() {
+      return entries_.size();
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclEntry getEntries(int index) {
+      return entries_.get(index);
+    }
+    /**
+     * <code>repeated .acl.AclEntry entries = 5;</code>
+     */
+    @java.lang.Override
+    public acl.Acl.AclEntryOrBuilder getEntriesOrBuilder(
+        int index) {
+      return entries_.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 {
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
+      }
+      if (type_ != acl.Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED.getNumber()) {
+        output.writeEnum(2, type_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, description_);
+      }
+      if (!getUserIdBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, userId_);
+      }
+      for (int i = 0; i < entries_.size(); i++) {
+        output.writeMessage(5, entries_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
+      }
+      if (type_ != acl.Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, type_);
+      }
+      if (!getDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, description_);
+      }
+      if (!getUserIdBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, userId_);
+      }
+      for (int i = 0; i < entries_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, entries_.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 acl.Acl.AclRuleSet)) {
+        return super.equals(obj);
+      }
+      acl.Acl.AclRuleSet other = (acl.Acl.AclRuleSet) obj;
+
+      if (!getName()
+          .equals(other.getName())) return false;
+      if (type_ != other.type_) return false;
+      if (!getDescription()
+          .equals(other.getDescription())) return false;
+      if (!getUserId()
+          .equals(other.getUserId())) return false;
+      if (!getEntriesList()
+          .equals(other.getEntriesList())) 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();
+      hash = (37 * hash) + NAME_FIELD_NUMBER;
+      hash = (53 * hash) + getName().hashCode();
+      hash = (37 * hash) + TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + type_;
+      hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER;
+      hash = (53 * hash) + getDescription().hashCode();
+      hash = (37 * hash) + USER_ID_FIELD_NUMBER;
+      hash = (53 * hash) + getUserId().hashCode();
+      if (getEntriesCount() > 0) {
+        hash = (37 * hash) + ENTRIES_FIELD_NUMBER;
+        hash = (53 * hash) + getEntriesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static acl.Acl.AclRuleSet parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static acl.Acl.AclRuleSet parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclRuleSet 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 acl.Acl.AclRuleSet parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclRuleSet 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 acl.Acl.AclRuleSet parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static acl.Acl.AclRuleSet 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(acl.Acl.AclRuleSet 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 acl.AclRuleSet}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:acl.AclRuleSet)
+        acl.Acl.AclRuleSetOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return acl.Acl.internal_static_acl_AclRuleSet_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                acl.Acl.AclRuleSet.class, acl.Acl.AclRuleSet.Builder.class);
+      }
+
+      // Construct using acl.Acl.AclRuleSet.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getEntriesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        name_ = "";
+
+        type_ = 0;
+
+        description_ = "";
+
+        userId_ = "";
+
+        if (entriesBuilder_ == null) {
+          entries_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          entriesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return acl.Acl.internal_static_acl_AclRuleSet_descriptor;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclRuleSet getDefaultInstanceForType() {
+        return acl.Acl.AclRuleSet.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclRuleSet build() {
+        acl.Acl.AclRuleSet result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public acl.Acl.AclRuleSet buildPartial() {
+        acl.Acl.AclRuleSet result = new acl.Acl.AclRuleSet(this);
+        int from_bitField0_ = bitField0_;
+        result.name_ = name_;
+        result.type_ = type_;
+        result.description_ = description_;
+        result.userId_ = userId_;
+        if (entriesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            entries_ = java.util.Collections.unmodifiableList(entries_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.entries_ = entries_;
+        } else {
+          result.entries_ = entriesBuilder_.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 acl.Acl.AclRuleSet) {
+          return mergeFrom((acl.Acl.AclRuleSet)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(acl.Acl.AclRuleSet other) {
+        if (other == acl.Acl.AclRuleSet.getDefaultInstance()) return this;
+        if (!other.getName().isEmpty()) {
+          name_ = other.name_;
+          onChanged();
+        }
+        if (other.type_ != 0) {
+          setTypeValue(other.getTypeValue());
+        }
+        if (!other.getDescription().isEmpty()) {
+          description_ = other.description_;
+          onChanged();
+        }
+        if (!other.getUserId().isEmpty()) {
+          userId_ = other.userId_;
+          onChanged();
+        }
+        if (entriesBuilder_ == null) {
+          if (!other.entries_.isEmpty()) {
+            if (entries_.isEmpty()) {
+              entries_ = other.entries_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureEntriesIsMutable();
+              entries_.addAll(other.entries_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.entries_.isEmpty()) {
+            if (entriesBuilder_.isEmpty()) {
+              entriesBuilder_.dispose();
+              entriesBuilder_ = null;
+              entries_ = other.entries_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              entriesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getEntriesFieldBuilder() : null;
+            } else {
+              entriesBuilder_.addAllMessages(other.entries_);
+            }
+          }
+        }
+        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 {
+        acl.Acl.AclRuleSet parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (acl.Acl.AclRuleSet) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.lang.Object name_ = "";
+      /**
+       * <code>string name = 1;</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;
+        }
+      }
+      /**
+       * <code>string name = 1;</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 = 1;</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;
+      }
+      /**
+       * <code>string name = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string name = 1;</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 int type_ = 0;
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @return The enum numeric value on the wire for type.
+       */
+      @java.lang.Override public int getTypeValue() {
+        return type_;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @param value The enum numeric value on the wire for type to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTypeValue(int value) {
+        
+        type_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @return The type.
+       */
+      @java.lang.Override
+      public acl.Acl.AclRuleTypeEnum getType() {
+        @SuppressWarnings("deprecation")
+        acl.Acl.AclRuleTypeEnum result = acl.Acl.AclRuleTypeEnum.valueOf(type_);
+        return result == null ? acl.Acl.AclRuleTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @param value The type to set.
+       * @return This builder for chaining.
+       */
+      public Builder setType(acl.Acl.AclRuleTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        type_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.acl.AclRuleTypeEnum type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearType() {
+        
+        type_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object description_ = "";
+      /**
+       * <code>string description = 3;</code>
+       * @return The description.
+       */
+      public java.lang.String getDescription() {
+        java.lang.Object ref = description_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          description_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @return The bytes for description.
+       */
+      public com.google.protobuf.ByteString
+          getDescriptionBytes() {
+        java.lang.Object ref = description_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          description_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @param value The description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        description_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDescription() {
+        
+        description_ = getDefaultInstance().getDescription();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string description = 3;</code>
+       * @param value The bytes for description to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDescriptionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        description_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object userId_ = "";
+      /**
+       * <code>string user_id = 4;</code>
+       * @return The userId.
+       */
+      public java.lang.String getUserId() {
+        java.lang.Object ref = userId_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          userId_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @return The bytes for userId.
+       */
+      public com.google.protobuf.ByteString
+          getUserIdBytes() {
+        java.lang.Object ref = userId_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          userId_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @param value The userId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUserId(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        userId_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUserId() {
+        
+        userId_ = getDefaultInstance().getUserId();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string user_id = 4;</code>
+       * @param value The bytes for userId to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUserIdBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        userId_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<acl.Acl.AclEntry> entries_ =
+        java.util.Collections.emptyList();
+      private void ensureEntriesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          entries_ = new java.util.ArrayList<acl.Acl.AclEntry>(entries_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder> entriesBuilder_;
+
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public java.util.List<acl.Acl.AclEntry> getEntriesList() {
+        if (entriesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(entries_);
+        } else {
+          return entriesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public int getEntriesCount() {
+        if (entriesBuilder_ == null) {
+          return entries_.size();
+        } else {
+          return entriesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry getEntries(int index) {
+        if (entriesBuilder_ == null) {
+          return entries_.get(index);
+        } else {
+          return entriesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder setEntries(
+          int index, acl.Acl.AclEntry value) {
+        if (entriesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEntriesIsMutable();
+          entries_.set(index, value);
+          onChanged();
+        } else {
+          entriesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder setEntries(
+          int index, acl.Acl.AclEntry.Builder builderForValue) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          entriesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(acl.Acl.AclEntry value) {
+        if (entriesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEntriesIsMutable();
+          entries_.add(value);
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(
+          int index, acl.Acl.AclEntry value) {
+        if (entriesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureEntriesIsMutable();
+          entries_.add(index, value);
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(
+          acl.Acl.AclEntry.Builder builderForValue) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.add(builderForValue.build());
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addEntries(
+          int index, acl.Acl.AclEntry.Builder builderForValue) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          entriesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder addAllEntries(
+          java.lang.Iterable<? extends acl.Acl.AclEntry> values) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, entries_);
+          onChanged();
+        } else {
+          entriesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder clearEntries() {
+        if (entriesBuilder_ == null) {
+          entries_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          entriesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public Builder removeEntries(int index) {
+        if (entriesBuilder_ == null) {
+          ensureEntriesIsMutable();
+          entries_.remove(index);
+          onChanged();
+        } else {
+          entriesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry.Builder getEntriesBuilder(
+          int index) {
+        return getEntriesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntryOrBuilder getEntriesOrBuilder(
+          int index) {
+        if (entriesBuilder_ == null) {
+          return entries_.get(index);  } else {
+          return entriesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public java.util.List<? extends acl.Acl.AclEntryOrBuilder> 
+           getEntriesOrBuilderList() {
+        if (entriesBuilder_ != null) {
+          return entriesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(entries_);
+        }
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry.Builder addEntriesBuilder() {
+        return getEntriesFieldBuilder().addBuilder(
+            acl.Acl.AclEntry.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public acl.Acl.AclEntry.Builder addEntriesBuilder(
+          int index) {
+        return getEntriesFieldBuilder().addBuilder(
+            index, acl.Acl.AclEntry.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .acl.AclEntry entries = 5;</code>
+       */
+      public java.util.List<acl.Acl.AclEntry.Builder> 
+           getEntriesBuilderList() {
+        return getEntriesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder> 
+          getEntriesFieldBuilder() {
+        if (entriesBuilder_ == null) {
+          entriesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              acl.Acl.AclEntry, acl.Acl.AclEntry.Builder, acl.Acl.AclEntryOrBuilder>(
+                  entries_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          entries_ = null;
+        }
+        return entriesBuilder_;
+      }
+      @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:acl.AclRuleSet)
+    }
+
+    // @@protoc_insertion_point(class_scope:acl.AclRuleSet)
+    private static final acl.Acl.AclRuleSet DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new acl.Acl.AclRuleSet();
+    }
+
+    public static acl.Acl.AclRuleSet getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AclRuleSet>
+        PARSER = new com.google.protobuf.AbstractParser<AclRuleSet>() {
+      @java.lang.Override
+      public AclRuleSet parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AclRuleSet(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AclRuleSet> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AclRuleSet> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public acl.Acl.AclRuleSet getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclMatch_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclMatch_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclAction_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclAction_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclEntry_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclEntry_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_acl_AclRuleSet_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_acl_AclRuleSet_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\tacl.proto\022\003acl\"\252\001\n\010AclMatch\022\014\n\004dscp\030\001 " +
+      "\001(\r\022\020\n\010protocol\030\002 \001(\r\022\023\n\013src_address\030\003 \001" +
+      "(\t\022\023\n\013dst_address\030\004 \001(\t\022\020\n\010src_port\030\005 \001(" +
+      "\r\022\020\n\010dst_port\030\006 \001(\r\022\030\n\020start_mpls_label\030" +
+      "\007 \001(\r\022\026\n\016end_mpls_label\030\010 \001(\r\"i\n\tAclActi" +
+      "on\0221\n\016forward_action\030\001 \001(\0162\031.acl.AclForw" +
+      "ardActionEnum\022)\n\nlog_action\030\002 \001(\0162\025.acl." +
+      "AclLogActionEnum\"r\n\010AclEntry\022\023\n\013sequence" +
+      "_id\030\001 \001(\r\022\023\n\013description\030\002 \001(\t\022\034\n\005match\030" +
+      "\003 \001(\0132\r.acl.AclMatch\022\036\n\006action\030\004 \001(\0132\016.a" +
+      "cl.AclAction\"\204\001\n\nAclRuleSet\022\014\n\004name\030\001 \001(" +
+      "\t\022\"\n\004type\030\002 \001(\0162\024.acl.AclRuleTypeEnum\022\023\n" +
+      "\013description\030\003 \001(\t\022\017\n\007user_id\030\004 \001(\t\022\036\n\007e" +
+      "ntries\030\005 \003(\0132\r.acl.AclEntry*\231\001\n\017AclRuleT" +
+      "ypeEnum\022\031\n\025ACLRULETYPE_UNDEFINED\020\000\022\024\n\020AC" +
+      "LRULETYPE_IPV4\020\001\022\024\n\020ACLRULETYPE_IPV6\020\002\022\022" +
+      "\n\016ACLRULETYPE_L2\020\003\022\024\n\020ACLRULETYPE_MPLS\020\004" +
+      "\022\025\n\021ACLRULETYPE_MIXED\020\005*\227\001\n\024AclForwardAc" +
+      "tionEnum\022!\n\035ACLFORWARDINGACTION_UNDEFINE" +
+      "D\020\000\022\034\n\030ACLFORWARDINGACTION_DROP\020\001\022\036\n\032ACL" +
+      "FORWARDINGACTION_ACCEPT\020\002\022\036\n\032ACLFORWARDI" +
+      "NGACTION_REJECT\020\003*_\n\020AclLogActionEnum\022\032\n" +
+      "\026ACLLOGACTION_UNDEFINED\020\000\022\026\n\022ACLLOGACTIO" +
+      "N_NOLOG\020\001\022\027\n\023ACLLOGACTION_SYSLOG\020\002b\006prot" +
+      "o3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_acl_AclMatch_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_acl_AclMatch_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclMatch_descriptor,
+        new java.lang.String[] { "Dscp", "Protocol", "SrcAddress", "DstAddress", "SrcPort", "DstPort", "StartMplsLabel", "EndMplsLabel", });
+    internal_static_acl_AclAction_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_acl_AclAction_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclAction_descriptor,
+        new java.lang.String[] { "ForwardAction", "LogAction", });
+    internal_static_acl_AclEntry_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_acl_AclEntry_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclEntry_descriptor,
+        new java.lang.String[] { "SequenceId", "Description", "Match", "Action", });
+    internal_static_acl_AclRuleSet_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_acl_AclRuleSet_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_acl_AclRuleSet_descriptor,
+        new java.lang.String[] { "Name", "Type", "Description", "UserId", "Entries", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
index ee807d7a7c69256b7a4c99c5139fafe076898918..09db33413e7785bb484fdd992f81894ac2dcafbf 100644
--- a/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
+++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -556,6 +556,10 @@ public final class ContextOuterClass {
      * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
      */
     SERVICESTATUS_PENDING_REMOVAL(3),
+    /**
+     * <code>SERVICESTATUS_SLA_VIOLATED = 4;</code>
+     */
+    SERVICESTATUS_SLA_VIOLATED(4),
     UNRECOGNIZED(-1),
     ;
 
@@ -575,6 +579,10 @@ public final class ContextOuterClass {
      * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
      */
     public static final int SERVICESTATUS_PENDING_REMOVAL_VALUE = 3;
+    /**
+     * <code>SERVICESTATUS_SLA_VIOLATED = 4;</code>
+     */
+    public static final int SERVICESTATUS_SLA_VIOLATED_VALUE = 4;
 
 
     public final int getNumber() {
@@ -605,6 +613,7 @@ public final class ContextOuterClass {
         case 1: return SERVICESTATUS_PLANNED;
         case 2: return SERVICESTATUS_ACTIVE;
         case 3: return SERVICESTATUS_PENDING_REMOVAL;
+        case 4: return SERVICESTATUS_SLA_VIOLATED;
         default: return null;
       }
     }
@@ -686,6 +695,10 @@ public final class ContextOuterClass {
      * <code>SLICESTATUS_DEINIT = 4;</code>
      */
     SLICESTATUS_DEINIT(4),
+    /**
+     * <code>SLICESTATUS_SLA_VIOLATED = 5;</code>
+     */
+    SLICESTATUS_SLA_VIOLATED(5),
     UNRECOGNIZED(-1),
     ;
 
@@ -709,6 +722,10 @@ public final class ContextOuterClass {
      * <code>SLICESTATUS_DEINIT = 4;</code>
      */
     public static final int SLICESTATUS_DEINIT_VALUE = 4;
+    /**
+     * <code>SLICESTATUS_SLA_VIOLATED = 5;</code>
+     */
+    public static final int SLICESTATUS_SLA_VIOLATED_VALUE = 5;
 
 
     public final int getNumber() {
@@ -740,6 +757,7 @@ public final class ContextOuterClass {
         case 2: return SLICESTATUS_INIT;
         case 3: return SLICESTATUS_ACTIVE;
         case 4: return SLICESTATUS_DEINIT;
+        case 5: return SLICESTATUS_SLA_VIOLATED;
         default: return null;
       }
     }
@@ -917,6 +935,177 @@ public final class ContextOuterClass {
     // @@protoc_insertion_point(enum_scope:context.ConfigActionEnum)
   }
 
+  /**
+   * Protobuf enum {@code context.IsolationLevelEnum}
+   */
+  public enum IsolationLevelEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>NO_ISOLATION = 0;</code>
+     */
+    NO_ISOLATION(0),
+    /**
+     * <code>PHYSICAL_ISOLATION = 1;</code>
+     */
+    PHYSICAL_ISOLATION(1),
+    /**
+     * <code>LOGICAL_ISOLATION = 2;</code>
+     */
+    LOGICAL_ISOLATION(2),
+    /**
+     * <code>PROCESS_ISOLATION = 3;</code>
+     */
+    PROCESS_ISOLATION(3),
+    /**
+     * <code>PHYSICAL_MEMORY_ISOLATION = 4;</code>
+     */
+    PHYSICAL_MEMORY_ISOLATION(4),
+    /**
+     * <code>PHYSICAL_NETWORK_ISOLATION = 5;</code>
+     */
+    PHYSICAL_NETWORK_ISOLATION(5),
+    /**
+     * <code>VIRTUAL_RESOURCE_ISOLATION = 6;</code>
+     */
+    VIRTUAL_RESOURCE_ISOLATION(6),
+    /**
+     * <code>NETWORK_FUNCTIONS_ISOLATION = 7;</code>
+     */
+    NETWORK_FUNCTIONS_ISOLATION(7),
+    /**
+     * <code>SERVICE_ISOLATION = 8;</code>
+     */
+    SERVICE_ISOLATION(8),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>NO_ISOLATION = 0;</code>
+     */
+    public static final int NO_ISOLATION_VALUE = 0;
+    /**
+     * <code>PHYSICAL_ISOLATION = 1;</code>
+     */
+    public static final int PHYSICAL_ISOLATION_VALUE = 1;
+    /**
+     * <code>LOGICAL_ISOLATION = 2;</code>
+     */
+    public static final int LOGICAL_ISOLATION_VALUE = 2;
+    /**
+     * <code>PROCESS_ISOLATION = 3;</code>
+     */
+    public static final int PROCESS_ISOLATION_VALUE = 3;
+    /**
+     * <code>PHYSICAL_MEMORY_ISOLATION = 4;</code>
+     */
+    public static final int PHYSICAL_MEMORY_ISOLATION_VALUE = 4;
+    /**
+     * <code>PHYSICAL_NETWORK_ISOLATION = 5;</code>
+     */
+    public static final int PHYSICAL_NETWORK_ISOLATION_VALUE = 5;
+    /**
+     * <code>VIRTUAL_RESOURCE_ISOLATION = 6;</code>
+     */
+    public static final int VIRTUAL_RESOURCE_ISOLATION_VALUE = 6;
+    /**
+     * <code>NETWORK_FUNCTIONS_ISOLATION = 7;</code>
+     */
+    public static final int NETWORK_FUNCTIONS_ISOLATION_VALUE = 7;
+    /**
+     * <code>SERVICE_ISOLATION = 8;</code>
+     */
+    public static final int SERVICE_ISOLATION_VALUE = 8;
+
+
+    public final int getNumber() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalArgumentException(
+            "Can't get the number of an unknown enum value.");
+      }
+      return value;
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     * @deprecated Use {@link #forNumber(int)} instead.
+     */
+    @java.lang.Deprecated
+    public static IsolationLevelEnum valueOf(int value) {
+      return forNumber(value);
+    }
+
+    /**
+     * @param value The numeric wire value of the corresponding enum entry.
+     * @return The enum associated with the given numeric wire value.
+     */
+    public static IsolationLevelEnum forNumber(int value) {
+      switch (value) {
+        case 0: return NO_ISOLATION;
+        case 1: return PHYSICAL_ISOLATION;
+        case 2: return LOGICAL_ISOLATION;
+        case 3: return PROCESS_ISOLATION;
+        case 4: return PHYSICAL_MEMORY_ISOLATION;
+        case 5: return PHYSICAL_NETWORK_ISOLATION;
+        case 6: return VIRTUAL_RESOURCE_ISOLATION;
+        case 7: return NETWORK_FUNCTIONS_ISOLATION;
+        case 8: return SERVICE_ISOLATION;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<IsolationLevelEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        IsolationLevelEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<IsolationLevelEnum>() {
+            public IsolationLevelEnum findValueByNumber(int number) {
+              return IsolationLevelEnum.forNumber(number);
+            }
+          };
+
+    public final com.google.protobuf.Descriptors.EnumValueDescriptor
+        getValueDescriptor() {
+      if (this == UNRECOGNIZED) {
+        throw new java.lang.IllegalStateException(
+            "Can't get the descriptor of an unrecognized enum value.");
+      }
+      return getDescriptor().getValues().get(ordinal());
+    }
+    public final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptorForType() {
+      return getDescriptor();
+    }
+    public static final com.google.protobuf.Descriptors.EnumDescriptor
+        getDescriptor() {
+      return context.ContextOuterClass.getDescriptor().getEnumTypes().get(7);
+    }
+
+    private static final IsolationLevelEnum[] VALUES = values();
+
+    public static IsolationLevelEnum valueOf(
+        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+      if (desc.getType() != getDescriptor()) {
+        throw new java.lang.IllegalArgumentException(
+          "EnumValueDescriptor is not for this type.");
+      }
+      if (desc.getIndex() == -1) {
+        return UNRECOGNIZED;
+      }
+      return VALUES[desc.getIndex()];
+    }
+
+    private final int value;
+
+    private IsolationLevelEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.IsolationLevelEnum)
+  }
+
   public interface EmptyOrBuilder extends
       // @@protoc_insertion_point(interface_extends:context.Empty)
       com.google.protobuf.MessageOrBuilder {
@@ -1911,8 +2100,8 @@ public final class ContextOuterClass {
 
   }
 
-  public interface EventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Event)
+  public interface TimestampOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Timestamp)
       com.google.protobuf.MessageOrBuilder {
 
     /**
@@ -1920,39 +2109,27 @@ public final class ContextOuterClass {
      * @return The timestamp.
      */
     double getTimestamp();
-
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The enum numeric value on the wire for eventType.
-     */
-    int getEventTypeValue();
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The eventType.
-     */
-    context.ContextOuterClass.EventTypeEnum getEventType();
   }
   /**
-   * Protobuf type {@code context.Event}
+   * Protobuf type {@code context.Timestamp}
    */
-  public static final class Event extends
+  public static final class Timestamp extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Event)
-      EventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Timestamp)
+      TimestampOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Event.newBuilder() to construct.
-    private Event(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Timestamp.newBuilder() to construct.
+    private Timestamp(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Event() {
-      eventType_ = 0;
+    private Timestamp() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Event();
+      return new Timestamp();
     }
 
     @java.lang.Override
@@ -1960,7 +2137,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Event(
+    private Timestamp(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -1983,12 +2160,6 @@ public final class ContextOuterClass {
               timestamp_ = input.readDouble();
               break;
             }
-            case 16: {
-              int rawValue = input.readEnum();
-
-              eventType_ = rawValue;
-              break;
-            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2010,15 +2181,15 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Event_descriptor;
+      return context.ContextOuterClass.internal_static_context_Timestamp_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Timestamp_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+              context.ContextOuterClass.Timestamp.class, context.ContextOuterClass.Timestamp.Builder.class);
     }
 
     public static final int TIMESTAMP_FIELD_NUMBER = 1;
@@ -2032,25 +2203,6 @@ public final class ContextOuterClass {
       return timestamp_;
     }
 
-    public static final int EVENT_TYPE_FIELD_NUMBER = 2;
-    private int eventType_;
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The enum numeric value on the wire for eventType.
-     */
-    @java.lang.Override public int getEventTypeValue() {
-      return eventType_;
-    }
-    /**
-     * <code>.context.EventTypeEnum event_type = 2;</code>
-     * @return The eventType.
-     */
-    @java.lang.Override public context.ContextOuterClass.EventTypeEnum getEventType() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
-      return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
-    }
-
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2068,9 +2220,6 @@ public final class ContextOuterClass {
       if (timestamp_ != 0D) {
         output.writeDouble(1, timestamp_);
       }
-      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
-        output.writeEnum(2, eventType_);
-      }
       unknownFields.writeTo(output);
     }
 
@@ -2084,10 +2233,6 @@ public final class ContextOuterClass {
         size += com.google.protobuf.CodedOutputStream
           .computeDoubleSize(1, timestamp_);
       }
-      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, eventType_);
-      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -2098,15 +2243,14 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Event)) {
+      if (!(obj instanceof context.ContextOuterClass.Timestamp)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Event other = (context.ContextOuterClass.Event) obj;
+      context.ContextOuterClass.Timestamp other = (context.ContextOuterClass.Timestamp) obj;
 
       if (java.lang.Double.doubleToLongBits(getTimestamp())
           != java.lang.Double.doubleToLongBits(
               other.getTimestamp())) return false;
-      if (eventType_ != other.eventType_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2121,76 +2265,74 @@ public final class ContextOuterClass {
       hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
       hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
           java.lang.Double.doubleToLongBits(getTimestamp()));
-      hash = (37 * hash) + EVENT_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + eventType_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp 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.Event parseFrom(byte[] data)
+    public static context.ContextOuterClass.Timestamp parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Event parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Timestamp parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp 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.Event parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Timestamp parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Event parseDelimitedFrom(
+    public static context.ContextOuterClass.Timestamp 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.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Event parseFrom(
+    public static context.ContextOuterClass.Timestamp parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2203,7 +2345,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Event prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Timestamp prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2219,26 +2361,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Event}
+     * Protobuf type {@code context.Timestamp}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Event)
-        context.ContextOuterClass.EventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Timestamp)
+        context.ContextOuterClass.TimestampOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+        return context.ContextOuterClass.internal_static_context_Timestamp_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Timestamp_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+                context.ContextOuterClass.Timestamp.class, context.ContextOuterClass.Timestamp.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Event.newBuilder()
+      // Construct using context.ContextOuterClass.Timestamp.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2258,25 +2400,23 @@ public final class ContextOuterClass {
         super.clear();
         timestamp_ = 0D;
 
-        eventType_ = 0;
-
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+        return context.ContextOuterClass.internal_static_context_Timestamp_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Event getDefaultInstanceForType() {
-        return context.ContextOuterClass.Event.getDefaultInstance();
+      public context.ContextOuterClass.Timestamp getDefaultInstanceForType() {
+        return context.ContextOuterClass.Timestamp.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Event build() {
-        context.ContextOuterClass.Event result = buildPartial();
+      public context.ContextOuterClass.Timestamp build() {
+        context.ContextOuterClass.Timestamp result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2284,10 +2424,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Event buildPartial() {
-        context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
+      public context.ContextOuterClass.Timestamp buildPartial() {
+        context.ContextOuterClass.Timestamp result = new context.ContextOuterClass.Timestamp(this);
         result.timestamp_ = timestamp_;
-        result.eventType_ = eventType_;
         onBuilt();
         return result;
       }
@@ -2326,22 +2465,19 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Event) {
-          return mergeFrom((context.ContextOuterClass.Event)other);
+        if (other instanceof context.ContextOuterClass.Timestamp) {
+          return mergeFrom((context.ContextOuterClass.Timestamp)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Event other) {
-        if (other == context.ContextOuterClass.Event.getDefaultInstance()) return this;
+      public Builder mergeFrom(context.ContextOuterClass.Timestamp other) {
+        if (other == context.ContextOuterClass.Timestamp.getDefaultInstance()) return this;
         if (other.getTimestamp() != 0D) {
           setTimestamp(other.getTimestamp());
         }
-        if (other.eventType_ != 0) {
-          setEventTypeValue(other.getEventTypeValue());
-        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -2357,11 +2493,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Event parsedMessage = null;
+        context.ContextOuterClass.Timestamp parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Timestamp) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2401,60 +2537,6 @@ public final class ContextOuterClass {
         onChanged();
         return this;
       }
-
-      private int eventType_ = 0;
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @return The enum numeric value on the wire for eventType.
-       */
-      @java.lang.Override public int getEventTypeValue() {
-        return eventType_;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @param value The enum numeric value on the wire for eventType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEventTypeValue(int value) {
-        
-        eventType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @return The eventType.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.EventTypeEnum getEventType() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
-        return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @param value The eventType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setEventType(context.ContextOuterClass.EventTypeEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        eventType_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.EventTypeEnum event_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearEventType() {
-        
-        eventType_ = 0;
-        onChanged();
-        return this;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -2468,89 +2550,97 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Event)
+      // @@protoc_insertion_point(builder_scope:context.Timestamp)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Event)
-    private static final context.ContextOuterClass.Event DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Timestamp)
+    private static final context.ContextOuterClass.Timestamp DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Event();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Timestamp();
     }
 
-    public static context.ContextOuterClass.Event getDefaultInstance() {
+    public static context.ContextOuterClass.Timestamp getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Event>
-        PARSER = new com.google.protobuf.AbstractParser<Event>() {
+    private static final com.google.protobuf.Parser<Timestamp>
+        PARSER = new com.google.protobuf.AbstractParser<Timestamp>() {
       @java.lang.Override
-      public Event parsePartialFrom(
+      public Timestamp parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Event(input, extensionRegistry);
+        return new Timestamp(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Event> parser() {
+    public static com.google.protobuf.Parser<Timestamp> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Event> getParserForType() {
+    public com.google.protobuf.Parser<Timestamp> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Event getDefaultInstanceForType() {
+    public context.ContextOuterClass.Timestamp getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextId)
+  public interface EventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Event)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return Whether the contextUuid field is set.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return Whether the timestamp field is set.
      */
-    boolean hasContextUuid();
+    boolean hasTimestamp();
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return The contextUuid.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return The timestamp.
      */
-    context.ContextOuterClass.Uuid getContextUuid();
+    context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
+     * <code>.context.Timestamp timestamp = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder();
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
+
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The enum numeric value on the wire for eventType.
+     */
+    int getEventTypeValue();
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The eventType.
+     */
+    context.ContextOuterClass.EventTypeEnum getEventType();
   }
   /**
-   * <pre>
-   * ----- Context -------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ContextId}
+   * Protobuf type {@code context.Event}
    */
-  public static final class ContextId extends
+  public static final class Event extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextId)
-      ContextIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Event)
+      EventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextId.newBuilder() to construct.
-    private ContextId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Event.newBuilder() to construct.
+    private Event(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextId() {
+    private Event() {
+      eventType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextId();
+      return new Event();
     }
 
     @java.lang.Override
@@ -2558,7 +2648,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextId(
+    private Event(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2577,18 +2667,24 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (contextUuid_ != null) {
-                subBuilder = contextUuid_.toBuilder();
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
               }
-              contextUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(contextUuid_);
-                contextUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
               }
 
               break;
             }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              eventType_ = rawValue;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2610,41 +2706,60 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+      return context.ContextOuterClass.internal_static_context_Event_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+              context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
     }
 
-    public static final int CONTEXT_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid contextUuid_;
+    public static final int TIMESTAMP_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Timestamp timestamp_;
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return Whether the contextUuid field is set.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return Whether the timestamp field is set.
      */
     @java.lang.Override
-    public boolean hasContextUuid() {
-      return contextUuid_ != null;
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
     }
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
-     * @return The contextUuid.
+     * <code>.context.Timestamp timestamp = 1;</code>
+     * @return The timestamp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getContextUuid() {
-      return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
     }
     /**
-     * <code>.context.Uuid context_uuid = 1;</code>
+     * <code>.context.Timestamp timestamp = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
-      return getContextUuid();
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
+    }
+
+    public static final int EVENT_TYPE_FIELD_NUMBER = 2;
+    private int eventType_;
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The enum numeric value on the wire for eventType.
+     */
+    @java.lang.Override public int getEventTypeValue() {
+      return eventType_;
+    }
+    /**
+     * <code>.context.EventTypeEnum event_type = 2;</code>
+     * @return The eventType.
+     */
+    @java.lang.Override public context.ContextOuterClass.EventTypeEnum getEventType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+      return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -2661,8 +2776,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextUuid_ != null) {
-        output.writeMessage(1, getContextUuid());
+      if (timestamp_ != null) {
+        output.writeMessage(1, getTimestamp());
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        output.writeEnum(2, eventType_);
       }
       unknownFields.writeTo(output);
     }
@@ -2673,9 +2791,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextUuid_ != null) {
+      if (timestamp_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextUuid());
+          .computeMessageSize(1, getTimestamp());
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, eventType_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2687,16 +2809,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextId)) {
+      if (!(obj instanceof context.ContextOuterClass.Event)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextId other = (context.ContextOuterClass.ContextId) obj;
+      context.ContextOuterClass.Event other = (context.ContextOuterClass.Event) obj;
 
-      if (hasContextUuid() != other.hasContextUuid()) return false;
-      if (hasContextUuid()) {
-        if (!getContextUuid()
-            .equals(other.getContextUuid())) return false;
+      if (hasTimestamp() != other.hasTimestamp()) return false;
+      if (hasTimestamp()) {
+        if (!getTimestamp()
+            .equals(other.getTimestamp())) return false;
       }
+      if (eventType_ != other.eventType_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2708,78 +2831,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextUuid()) {
-        hash = (37 * hash) + CONTEXT_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextUuid().hashCode();
+      if (hasTimestamp()) {
+        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+        hash = (53 * hash) + getTimestamp().hashCode();
       }
+      hash = (37 * hash) + EVENT_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + eventType_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event 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.ContextId parseFrom(byte[] data)
+    public static context.ContextOuterClass.Event parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Event parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event 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.ContextId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Event parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextId parseDelimitedFrom(
+    public static context.ContextOuterClass.Event 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.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextId parseFrom(
+    public static context.ContextOuterClass.Event parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2792,7 +2917,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Event prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2808,30 +2933,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Context -------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ContextId}
+     * Protobuf type {@code context.Event}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextId)
-        context.ContextOuterClass.ContextIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Event)
+        context.ContextOuterClass.EventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+                context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextId.newBuilder()
+      // Construct using context.ContextOuterClass.Event.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2849,29 +2970,31 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextUuidBuilder_ == null) {
-          contextUuid_ = null;
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
         } else {
-          contextUuid_ = null;
-          contextUuidBuilder_ = null;
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
+        eventType_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextId.getDefaultInstance();
+      public context.ContextOuterClass.Event getDefaultInstanceForType() {
+        return context.ContextOuterClass.Event.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextId build() {
-        context.ContextOuterClass.ContextId result = buildPartial();
+      public context.ContextOuterClass.Event build() {
+        context.ContextOuterClass.Event result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2879,13 +3002,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextId buildPartial() {
-        context.ContextOuterClass.ContextId result = new context.ContextOuterClass.ContextId(this);
-        if (contextUuidBuilder_ == null) {
-          result.contextUuid_ = contextUuid_;
+      public context.ContextOuterClass.Event buildPartial() {
+        context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
         } else {
-          result.contextUuid_ = contextUuidBuilder_.build();
+          result.timestamp_ = timestampBuilder_.build();
         }
+        result.eventType_ = eventType_;
         onBuilt();
         return result;
       }
@@ -2924,18 +3048,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextId) {
-          return mergeFrom((context.ContextOuterClass.ContextId)other);
+        if (other instanceof context.ContextOuterClass.Event) {
+          return mergeFrom((context.ContextOuterClass.Event)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextId other) {
-        if (other == context.ContextOuterClass.ContextId.getDefaultInstance()) return this;
-        if (other.hasContextUuid()) {
-          mergeContextUuid(other.getContextUuid());
+      public Builder mergeFrom(context.ContextOuterClass.Event other) {
+        if (other == context.ContextOuterClass.Event.getDefaultInstance()) return this;
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
+        if (other.eventType_ != 0) {
+          setEventTypeValue(other.getEventTypeValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -2952,11 +3079,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextId parsedMessage = null;
+        context.ContextOuterClass.Event parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -2966,123 +3093,177 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Uuid contextUuid_;
+      private context.ContextOuterClass.Timestamp timestamp_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
-       * @return Whether the contextUuid field is set.
+       * <code>.context.Timestamp timestamp = 1;</code>
+       * @return Whether the timestamp field is set.
        */
-      public boolean hasContextUuid() {
-        return contextUuidBuilder_ != null || contextUuid_ != null;
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
-       * @return The contextUuid.
+       * <code>.context.Timestamp timestamp = 1;</code>
+       * @return The timestamp.
        */
-      public context.ContextOuterClass.Uuid getContextUuid() {
-        if (contextUuidBuilder_ == null) {
-          return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         } else {
-          return contextUuidBuilder_.getMessage();
+          return timestampBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder setContextUuid(context.ContextOuterClass.Uuid value) {
-        if (contextUuidBuilder_ == null) {
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextUuid_ = value;
+          timestamp_ = value;
           onChanged();
         } else {
-          contextUuidBuilder_.setMessage(value);
+          timestampBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder setContextUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (contextUuidBuilder_ == null) {
-          contextUuid_ = builderForValue.build();
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          contextUuidBuilder_.setMessage(builderForValue.build());
+          timestampBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
-        if (contextUuidBuilder_ == null) {
-          if (contextUuid_ != null) {
-            contextUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (timestamp_ != null) {
+            timestamp_ =
+              context.ContextOuterClass.Timestamp.newBuilder(timestamp_).mergeFrom(value).buildPartial();
           } else {
-            contextUuid_ = value;
+            timestamp_ = value;
           }
           onChanged();
         } else {
-          contextUuidBuilder_.mergeFrom(value);
+          timestampBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public Builder clearContextUuid() {
-        if (contextUuidBuilder_ == null) {
-          contextUuid_ = null;
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
           onChanged();
         } else {
-          contextUuid_ = null;
-          contextUuidBuilder_ = null;
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
         
         onChanged();
-        return getContextUuidFieldBuilder().getBuilder();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
-        if (contextUuidBuilder_ != null) {
-          return contextUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
         } else {
-          return contextUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         }
       }
       /**
-       * <code>.context.Uuid context_uuid = 1;</code>
+       * <code>.context.Timestamp timestamp = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getContextUuidFieldBuilder() {
-        if (contextUuidBuilder_ == null) {
-          contextUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getContextUuid(),
+          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());
-          contextUuid_ = null;
+          timestamp_ = null;
         }
-        return contextUuidBuilder_;
+        return timestampBuilder_;
+      }
+
+      private int eventType_ = 0;
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return The enum numeric value on the wire for eventType.
+       */
+      @java.lang.Override public int getEventTypeValue() {
+        return eventType_;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @param value The enum numeric value on the wire for eventType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEventTypeValue(int value) {
+        
+        eventType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return The eventType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.EventTypeEnum getEventType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.EventTypeEnum result = context.ContextOuterClass.EventTypeEnum.valueOf(eventType_);
+        return result == null ? context.ContextOuterClass.EventTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @param value The eventType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEventType(context.ContextOuterClass.EventTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        eventType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.EventTypeEnum event_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEventType() {
+        
+        eventType_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -3097,150 +3278,89 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextId)
+      // @@protoc_insertion_point(builder_scope:context.Event)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextId)
-    private static final context.ContextOuterClass.ContextId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Event)
+    private static final context.ContextOuterClass.Event DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Event();
     }
 
-    public static context.ContextOuterClass.ContextId getDefaultInstance() {
+    public static context.ContextOuterClass.Event getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextId>
-        PARSER = new com.google.protobuf.AbstractParser<ContextId>() {
+    private static final com.google.protobuf.Parser<Event>
+        PARSER = new com.google.protobuf.AbstractParser<Event>() {
       @java.lang.Override
-      public ContextId parsePartialFrom(
+      public Event parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextId(input, extensionRegistry);
+        return new Event(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextId> parser() {
+    public static com.google.protobuf.Parser<Event> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextId> getParserForType() {
+    public com.google.protobuf.Parser<Event> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Event getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Context)
+  public interface ContextIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    boolean hasContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
-     */
-    context.ContextOuterClass.ContextId getContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
-
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.TopologyId> 
-        getTopologyIdsList();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    context.ContextOuterClass.TopologyId getTopologyIds(int index);
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    int getTopologyIdsCount();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList();
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceIdsList();
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    context.ContextOuterClass.ServiceId getServiceIds(int index);
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    int getServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return Whether the controller field is set.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
      */
-    boolean hasController();
+    boolean hasContextUuid();
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return The controller.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
      */
-    context.ContextOuterClass.TeraFlowController getController();
+    context.ContextOuterClass.Uuid getContextUuid();
     /**
-     * <code>.context.TeraFlowController controller = 4;</code>
+     * <code>.context.Uuid context_uuid = 1;</code>
      */
-    context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Context}
+   * <pre>
+   * ----- Context -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ContextId}
    */
-  public static final class Context extends
+  public static final class ContextId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Context)
-      ContextOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ContextId)
+      ContextIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Context.newBuilder() to construct.
-    private Context(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ContextId.newBuilder() to construct.
+    private ContextId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Context() {
-      topologyIds_ = java.util.Collections.emptyList();
-      serviceIds_ = java.util.Collections.emptyList();
+    private ContextId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Context();
+      return new ContextId();
     }
 
     @java.lang.Override
@@ -3248,7 +3368,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Context(
+    private ContextId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3256,7 +3376,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 {
@@ -3268,45 +3387,14 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              topologyIds_.add(
-                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              serviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              context.ContextOuterClass.TeraFlowController.Builder subBuilder = null;
-              if (controller_ != null) {
-                subBuilder = controller_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (contextUuid_ != null) {
+                subBuilder = contextUuid_.toBuilder();
               }
-              controller_ = input.readMessage(context.ContextOuterClass.TeraFlowController.parser(), extensionRegistry);
+              contextUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(controller_);
-                controller_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(contextUuid_);
+                contextUuid_ = subBuilder.buildPartial();
               }
 
               break;
@@ -3326,211 +3414,78 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+              context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
+    public static final int CONTEXT_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid contextUuid_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public boolean hasContextUuid() {
+      return contextUuid_ != null;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.Uuid getContextUuid() {
+      return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.Uuid context_uuid = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+      return getContextUuid();
     }
 
-    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
+    private byte memoizedIsInitialized = -1;
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-      return topologyIds_;
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
     }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
+
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList() {
-      return topologyIds_;
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      if (contextUuid_ != null) {
+        output.writeMessage(1, getContextUuid());
+      }
+      unknownFields.writeTo(output);
     }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    @java.lang.Override
-    public int getTopologyIdsCount() {
-      return topologyIds_.size();
-    }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-      return topologyIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.TopologyId topology_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-        int index) {
-      return topologyIds_.get(index);
-    }
-
-    public static final int SERVICE_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-      return serviceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList() {
-      return serviceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public int getServiceIdsCount() {
-      return serviceIds_.size();
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-      return serviceIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.ServiceId service_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index) {
-      return serviceIds_.get(index);
-    }
-
-    public static final int CONTROLLER_FIELD_NUMBER = 4;
-    private context.ContextOuterClass.TeraFlowController controller_;
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return Whether the controller field is set.
-     */
-    @java.lang.Override
-    public boolean hasController() {
-      return controller_ != null;
-    }
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     * @return The controller.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TeraFlowController getController() {
-      return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
-    }
-    /**
-     * <code>.context.TeraFlowController controller = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
-      return getController();
-    }
-
-    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 (contextId_ != null) {
-        output.writeMessage(1, getContextId());
-      }
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        output.writeMessage(2, topologyIds_.get(i));
-      }
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        output.writeMessage(3, serviceIds_.get(i));
-      }
-      if (controller_ != null) {
-        output.writeMessage(4, getController());
-      }
-      unknownFields.writeTo(output);
-    }
-
+
     @java.lang.Override
     public int getSerializedSize() {
       int size = memoizedSize;
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
-      }
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, topologyIds_.get(i));
-      }
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, serviceIds_.get(i));
-      }
-      if (controller_ != null) {
+      if (contextUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getController());
+          .computeMessageSize(1, getContextUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -3542,24 +3497,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Context)) {
+      if (!(obj instanceof context.ContextOuterClass.ContextId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Context other = (context.ContextOuterClass.Context) obj;
+      context.ContextOuterClass.ContextId other = (context.ContextOuterClass.ContextId) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (!getTopologyIdsList()
-          .equals(other.getTopologyIdsList())) return false;
-      if (!getServiceIdsList()
-          .equals(other.getServiceIdsList())) return false;
-      if (hasController() != other.hasController()) return false;
-      if (hasController()) {
-        if (!getController()
-            .equals(other.getController())) return false;
+      if (hasContextUuid() != other.hasContextUuid()) return false;
+      if (hasContextUuid()) {
+        if (!getContextUuid()
+            .equals(other.getContextUuid())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -3572,90 +3518,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
-      }
-      if (getTopologyIdsCount() > 0) {
-        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyIdsList().hashCode();
-      }
-      if (getServiceIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceIdsList().hashCode();
-      }
-      if (hasController()) {
-        hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
-        hash = (53 * hash) + getController().hashCode();
+      if (hasContextUuid()) {
+        hash = (37 * hash) + CONTEXT_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId 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.Context parseFrom(byte[] data)
+    public static context.ContextOuterClass.ContextId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Context parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ContextId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId 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.Context parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ContextId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Context parseDelimitedFrom(
+    public static context.ContextOuterClass.ContextId 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.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Context parseFrom(
+    public static context.ContextOuterClass.ContextId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -3668,7 +3602,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Context prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ContextId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -3684,26 +3618,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Context}
+     * <pre>
+     * ----- Context -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ContextId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Context)
-        context.ContextOuterClass.ContextOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ContextId)
+        context.ContextOuterClass.ContextIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+                context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Context.newBuilder()
+      // Construct using context.ContextOuterClass.ContextId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -3716,36 +3654,16 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologyIdsFieldBuilder();
-          getServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
-        } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
-        }
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          topologyIdsBuilder_.clear();
-        }
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          serviceIdsBuilder_.clear();
-        }
-        if (controllerBuilder_ == null) {
-          controller_ = null;
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
         } else {
-          controller_ = null;
-          controllerBuilder_ = null;
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
         }
         return this;
       }
@@ -3753,17 +3671,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Context getDefaultInstanceForType() {
-        return context.ContextOuterClass.Context.getDefaultInstance();
+      public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Context build() {
-        context.ContextOuterClass.Context result = buildPartial();
+      public context.ContextOuterClass.ContextId build() {
+        context.ContextOuterClass.ContextId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -3771,36 +3689,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Context buildPartial() {
-        context.ContextOuterClass.Context result = new context.ContextOuterClass.Context(this);
-        int from_bitField0_ = bitField0_;
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
-        } else {
-          result.contextId_ = contextIdBuilder_.build();
-        }
-        if (topologyIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.topologyIds_ = topologyIds_;
-        } else {
-          result.topologyIds_ = topologyIdsBuilder_.build();
-        }
-        if (serviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.serviceIds_ = serviceIds_;
-        } else {
-          result.serviceIds_ = serviceIdsBuilder_.build();
-        }
-        if (controllerBuilder_ == null) {
-          result.controller_ = controller_;
+      public context.ContextOuterClass.ContextId buildPartial() {
+        context.ContextOuterClass.ContextId result = new context.ContextOuterClass.ContextId(this);
+        if (contextUuidBuilder_ == null) {
+          result.contextUuid_ = contextUuid_;
         } else {
-          result.controller_ = controllerBuilder_.build();
+          result.contextUuid_ = contextUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -3840,73 +3734,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Context) {
-          return mergeFrom((context.ContextOuterClass.Context)other);
+        if (other instanceof context.ContextOuterClass.ContextId) {
+          return mergeFrom((context.ContextOuterClass.ContextId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Context other) {
-        if (other == context.ContextOuterClass.Context.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (topologyIdsBuilder_ == null) {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIds_.isEmpty()) {
-              topologyIds_ = other.topologyIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureTopologyIdsIsMutable();
-              topologyIds_.addAll(other.topologyIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIdsBuilder_.isEmpty()) {
-              topologyIdsBuilder_.dispose();
-              topologyIdsBuilder_ = null;
-              topologyIds_ = other.topologyIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              topologyIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologyIdsFieldBuilder() : null;
-            } else {
-              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
-            }
-          }
-        }
-        if (serviceIdsBuilder_ == null) {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIds_.isEmpty()) {
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureServiceIdsIsMutable();
-              serviceIds_.addAll(other.serviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIdsBuilder_.isEmpty()) {
-              serviceIdsBuilder_.dispose();
-              serviceIdsBuilder_ = null;
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              serviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceIdsFieldBuilder() : null;
-            } else {
-              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
-            }
-          }
-        }
-        if (other.hasController()) {
-          mergeController(other.getController());
+      public Builder mergeFrom(context.ContextOuterClass.ContextId other) {
+        if (other == context.ContextOuterClass.ContextId.getDefaultInstance()) return this;
+        if (other.hasContextUuid()) {
+          mergeContextUuid(other.getContextUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -3923,11 +3762,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Context parsedMessage = null;
+        context.ContextOuterClass.ContextId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Context) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -3936,724 +3775,14928 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.ContextId contextId_;
+      private context.ContextOuterClass.Uuid contextUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return Whether the contextUuid field is set.
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public boolean hasContextUuid() {
+        return contextUuidBuilder_ != null || contextUuid_ != null;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return The contextUuid.
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public context.ContextOuterClass.Uuid getContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
         } else {
-          return contextIdBuilder_.getMessage();
+          return contextUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder setContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          contextUuid_ = value;
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          contextUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setContextUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = builderForValue.build();
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          contextUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+      public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
+          if (contextUuid_ != null) {
+            contextUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
           } else {
-            contextId_ = value;
+            contextUuid_ = value;
           }
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          contextUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder clearContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
         
         onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+        return getContextUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+        if (contextUuidBuilder_ != null) {
+          return contextUuidBuilder_.getMessageOrBuilder();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return contextUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Uuid context_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getContextUuidFieldBuilder() {
+        if (contextUuidBuilder_ == null) {
+          contextUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getContextUuid(),
                   getParentForChildren(),
                   isClean());
-          contextId_ = null;
+          contextUuid_ = null;
         }
-        return contextIdBuilder_;
+        return contextUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
 
-      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
-        java.util.Collections.emptyList();
-      private void ensureTopologyIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
-          bitField0_ |= 0x00000001;
-         }
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
 
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-        if (topologyIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologyIds_);
-        } else {
-          return topologyIdsBuilder_.getMessageList();
-        }
+      // @@protoc_insertion_point(builder_scope:context.ContextId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextId)
+    private static final context.ContextOuterClass.ContextId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextId();
+    }
+
+    public static context.ContextOuterClass.ContextId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextId>
+        PARSER = new com.google.protobuf.AbstractParser<ContextId>() {
+      @java.lang.Override
+      public ContextId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextId(input, extensionRegistry);
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+    };
+
+    public static com.google.protobuf.Parser<ContextId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Context)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    int getTopologyIdsCount();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    int getServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return Whether the controller field is set.
+     */
+    boolean hasController();
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return The controller.
+     */
+    context.ContextOuterClass.TeraFlowController getController();
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     */
+    context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.Context}
+   */
+  public static final class Context extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Context)
+      ContextOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Context.newBuilder() to construct.
+    private Context(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Context() {
+      topologyIds_ = java.util.Collections.emptyList();
+      serviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Context();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Context(
+        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.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.TeraFlowController.Builder subBuilder = null;
+              if (controller_ != null) {
+                subBuilder = controller_.toBuilder();
+              }
+              controller_ = input.readMessage(context.ContextOuterClass.TeraFlowController.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(controller_);
+                controller_ = 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)) {
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Context_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index) {
+      return topologyIds_.get(index);
+    }
+
+    public static final int SERVICE_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.get(index);
+    }
+
+    public static final int CONTROLLER_FIELD_NUMBER = 4;
+    private context.ContextOuterClass.TeraFlowController controller_;
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return Whether the controller field is set.
+     */
+    @java.lang.Override
+    public boolean hasController() {
+      return controller_ != null;
+    }
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     * @return The controller.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowController getController() {
+      return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+    }
+    /**
+     * <code>.context.TeraFlowController controller = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
+      return getController();
+    }
+
+    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 (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        output.writeMessage(2, topologyIds_.get(i));
+      }
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(3, serviceIds_.get(i));
+      }
+      if (controller_ != null) {
+        output.writeMessage(4, getController());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      for (int i = 0; i < topologyIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, topologyIds_.get(i));
+      }
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, serviceIds_.get(i));
+      }
+      if (controller_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getController());
+      }
+      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.Context)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Context other = (context.ContextOuterClass.Context) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) return false;
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
+      if (hasController() != other.hasController()) return false;
+      if (hasController()) {
+        if (!getController()
+            .equals(other.getController())) 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 (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      }
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
+      }
+      if (hasController()) {
+        hash = (37 * hash) + CONTROLLER_FIELD_NUMBER;
+        hash = (53 * hash) + getController().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Context parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context 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.Context parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Context parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Context parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context 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.Context parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context 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.Context parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Context 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.Context 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.Context}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Context)
+        context.ContextOuterClass.ContextOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Context_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Context.class, context.ContextOuterClass.Context.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Context.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologyIdsFieldBuilder();
+          getServiceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        if (controllerBuilder_ == null) {
+          controller_ = null;
+        } else {
+          controller_ = null;
+          controllerBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Context_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context getDefaultInstanceForType() {
+        return context.ContextOuterClass.Context.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context build() {
+        context.ContextOuterClass.Context result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Context buildPartial() {
+        context.ContextOuterClass.Context result = new context.ContextOuterClass.Context(this);
+        int from_bitField0_ = bitField0_;
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (topologyIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologyIds_ = topologyIds_;
+        } else {
+          result.topologyIds_ = topologyIdsBuilder_.build();
+        }
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
+        }
+        if (controllerBuilder_ == null) {
+          result.controller_ = controller_;
+        } else {
+          result.controller_ = controllerBuilder_.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.Context) {
+          return mergeFrom((context.ContextOuterClass.Context)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Context other) {
+        if (other == context.ContextOuterClass.Context.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologyIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologyIdsFieldBuilder() : null;
+            } else {
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+            }
+          }
+        }
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
+        }
+        if (other.hasController()) {
+          mergeController(other.getController());
+        }
+        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.Context parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Context) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologyIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        } else {
+          return topologyIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
+        } else {
+          return topologyIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
+        } else {
+          return topologyIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologyIds_);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+          int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologyIds_ = null;
+        }
+        return topologyIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        } else {
+          return serviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
+        } else {
+          return serviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceIds_);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+          int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+
+      private context.ContextOuterClass.TeraFlowController controller_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> controllerBuilder_;
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       * @return Whether the controller field is set.
+       */
+      public boolean hasController() {
+        return controllerBuilder_ != null || controller_ != null;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       * @return The controller.
+       */
+      public context.ContextOuterClass.TeraFlowController getController() {
+        if (controllerBuilder_ == null) {
+          return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+        } else {
+          return controllerBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder setController(context.ContextOuterClass.TeraFlowController value) {
+        if (controllerBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          controller_ = value;
+          onChanged();
+        } else {
+          controllerBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder setController(
+          context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
+        if (controllerBuilder_ == null) {
+          controller_ = builderForValue.build();
+          onChanged();
+        } else {
+          controllerBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
+        if (controllerBuilder_ == null) {
+          if (controller_ != null) {
+            controller_ =
+              context.ContextOuterClass.TeraFlowController.newBuilder(controller_).mergeFrom(value).buildPartial();
+          } else {
+            controller_ = value;
+          }
+          onChanged();
+        } else {
+          controllerBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public Builder clearController() {
+        if (controllerBuilder_ == null) {
+          controller_ = null;
+          onChanged();
+        } else {
+          controller_ = null;
+          controllerBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
+        
+        onChanged();
+        return getControllerFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
+        if (controllerBuilder_ != null) {
+          return controllerBuilder_.getMessageOrBuilder();
+        } else {
+          return controller_ == null ?
+              context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+        }
+      }
+      /**
+       * <code>.context.TeraFlowController controller = 4;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> 
+          getControllerFieldBuilder() {
+        if (controllerBuilder_ == null) {
+          controllerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder>(
+                  getController(),
+                  getParentForChildren(),
+                  isClean());
+          controller_ = null;
+        }
+        return controllerBuilder_;
+      }
+      @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.Context)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Context)
+    private static final context.ContextOuterClass.Context DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Context();
+    }
+
+    public static context.ContextOuterClass.Context getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Context>
+        PARSER = new com.google.protobuf.AbstractParser<Context>() {
+      @java.lang.Override
+      public Context parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Context(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Context> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Context> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Context getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ContextId> 
+        getContextIdsList();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    context.ContextOuterClass.ContextId getContextIds(int index);
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    int getContextIdsCount();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+        getContextIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ContextIdList}
+   */
+  public static final class ContextIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextIdList)
+      ContextIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextIdList.newBuilder() to construct.
+    private ContextIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextIdList() {
+      contextIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextIdList(
+        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)) {
+                contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              contextIds_.add(
+                  input.readMessage(context.ContextOuterClass.ContextId.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)) {
+          contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+    }
+
+    public static final int CONTEXT_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ContextId> contextIds_;
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
+      return contextIds_;
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+        getContextIdsOrBuilderList() {
+      return contextIds_;
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getContextIdsCount() {
+      return contextIds_.size();
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextIds(int index) {
+      return contextIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ContextId context_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+        int index) {
+      return contextIds_.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 < contextIds_.size(); i++) {
+        output.writeMessage(1, contextIds_.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 < contextIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, contextIds_.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.ContextIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextIdList other = (context.ContextOuterClass.ContextIdList) obj;
+
+      if (!getContextIdsList()
+          .equals(other.getContextIdsList())) 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 (getContextIdsCount() > 0) {
+        hash = (37 * hash) + CONTEXT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getContextIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList 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.ContextIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList 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.ContextIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList 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.ContextIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextIdList 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.ContextIdList 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.ContextIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextIdList)
+        context.ContextOuterClass.ContextIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getContextIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdsBuilder_ == null) {
+          contextIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          contextIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList build() {
+        context.ContextOuterClass.ContextIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextIdList buildPartial() {
+        context.ContextOuterClass.ContextIdList result = new context.ContextOuterClass.ContextIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (contextIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.contextIds_ = contextIds_;
+        } else {
+          result.contextIds_ = contextIdsBuilder_.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.ContextIdList) {
+          return mergeFrom((context.ContextOuterClass.ContextIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextIdList other) {
+        if (other == context.ContextOuterClass.ContextIdList.getDefaultInstance()) return this;
+        if (contextIdsBuilder_ == null) {
+          if (!other.contextIds_.isEmpty()) {
+            if (contextIds_.isEmpty()) {
+              contextIds_ = other.contextIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureContextIdsIsMutable();
+              contextIds_.addAll(other.contextIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.contextIds_.isEmpty()) {
+            if (contextIdsBuilder_.isEmpty()) {
+              contextIdsBuilder_.dispose();
+              contextIdsBuilder_ = null;
+              contextIds_ = other.contextIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              contextIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getContextIdsFieldBuilder() : null;
+            } else {
+              contextIdsBuilder_.addAllMessages(other.contextIds_);
+            }
+          }
+        }
+        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.ContextIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ContextId> contextIds_ =
+        java.util.Collections.emptyList();
+      private void ensureContextIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>(contextIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
+        if (contextIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(contextIds_);
+        } else {
+          return contextIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public int getContextIdsCount() {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.size();
+        } else {
+          return contextIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId getContextIds(int index) {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.get(index);
+        } else {
+          return contextIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder setContextIds(
+          int index, context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.set(index, value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder setContextIds(
+          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.add(value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          int index, context.ContextOuterClass.ContextId value) {
+        if (contextIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextIdsIsMutable();
+          contextIds_.add(index, value);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addContextIds(
+          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder addAllContextIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ContextId> values) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, contextIds_);
+          onChanged();
+        } else {
+          contextIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder clearContextIds() {
+        if (contextIdsBuilder_ == null) {
+          contextIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          contextIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public Builder removeContextIds(int index) {
+        if (contextIdsBuilder_ == null) {
+          ensureContextIdsIsMutable();
+          contextIds_.remove(index);
+          onChanged();
+        } else {
+          contextIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdsBuilder(
+          int index) {
+        return getContextIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+          int index) {
+        if (contextIdsBuilder_ == null) {
+          return contextIds_.get(index);  } else {
+          return contextIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
+           getContextIdsOrBuilderList() {
+        if (contextIdsBuilder_ != null) {
+          return contextIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(contextIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder() {
+        return getContextIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ContextId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder(
+          int index) {
+        return getContextIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ContextId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ContextId context_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ContextId.Builder> 
+           getContextIdsBuilderList() {
+        return getContextIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdsFieldBuilder() {
+        if (contextIdsBuilder_ == null) {
+          contextIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  contextIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          contextIds_ = null;
+        }
+        return contextIdsBuilder_;
+      }
+      @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.ContextIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextIdList)
+    private static final context.ContextOuterClass.ContextIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextIdList();
+    }
+
+    public static context.ContextOuterClass.ContextIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ContextIdList>() {
+      @java.lang.Override
+      public ContextIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Context> 
+        getContextsList();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    context.ContextOuterClass.Context getContexts(int index);
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    int getContextsCount();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+        getContextsOrBuilderList();
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ContextList}
+   */
+  public static final class ContextList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextList)
+      ContextListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextList.newBuilder() to construct.
+    private ContextList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextList() {
+      contexts_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextList(
+        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)) {
+                contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              contexts_.add(
+                  input.readMessage(context.ContextOuterClass.Context.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)) {
+          contexts_ = java.util.Collections.unmodifiableList(contexts_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+    }
+
+    public static final int CONTEXTS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Context> contexts_;
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Context> getContextsList() {
+      return contexts_;
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+        getContextsOrBuilderList() {
+      return contexts_;
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public int getContextsCount() {
+      return contexts_.size();
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Context getContexts(int index) {
+      return contexts_.get(index);
+    }
+    /**
+     * <code>repeated .context.Context contexts = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+        int index) {
+      return contexts_.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 < contexts_.size(); i++) {
+        output.writeMessage(1, contexts_.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 < contexts_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, contexts_.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.ContextList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextList other = (context.ContextOuterClass.ContextList) obj;
+
+      if (!getContextsList()
+          .equals(other.getContextsList())) 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 (getContextsCount() > 0) {
+        hash = (37 * hash) + CONTEXTS_FIELD_NUMBER;
+        hash = (53 * hash) + getContextsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList 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.ContextList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList 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.ContextList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList 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.ContextList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextList 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.ContextList 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.ContextList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextList)
+        context.ContextOuterClass.ContextListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getContextsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextsBuilder_ == null) {
+          contexts_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          contextsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList build() {
+        context.ContextOuterClass.ContextList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextList buildPartial() {
+        context.ContextOuterClass.ContextList result = new context.ContextOuterClass.ContextList(this);
+        int from_bitField0_ = bitField0_;
+        if (contextsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            contexts_ = java.util.Collections.unmodifiableList(contexts_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.contexts_ = contexts_;
+        } else {
+          result.contexts_ = contextsBuilder_.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.ContextList) {
+          return mergeFrom((context.ContextOuterClass.ContextList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextList other) {
+        if (other == context.ContextOuterClass.ContextList.getDefaultInstance()) return this;
+        if (contextsBuilder_ == null) {
+          if (!other.contexts_.isEmpty()) {
+            if (contexts_.isEmpty()) {
+              contexts_ = other.contexts_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureContextsIsMutable();
+              contexts_.addAll(other.contexts_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.contexts_.isEmpty()) {
+            if (contextsBuilder_.isEmpty()) {
+              contextsBuilder_.dispose();
+              contextsBuilder_ = null;
+              contexts_ = other.contexts_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              contextsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getContextsFieldBuilder() : null;
+            } else {
+              contextsBuilder_.addAllMessages(other.contexts_);
+            }
+          }
+        }
+        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.ContextList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Context> contexts_ =
+        java.util.Collections.emptyList();
+      private void ensureContextsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>(contexts_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> contextsBuilder_;
+
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Context> getContextsList() {
+        if (contextsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(contexts_);
+        } else {
+          return contextsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public int getContextsCount() {
+        if (contextsBuilder_ == null) {
+          return contexts_.size();
+        } else {
+          return contextsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context getContexts(int index) {
+        if (contextsBuilder_ == null) {
+          return contexts_.get(index);
+        } else {
+          return contextsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder setContexts(
+          int index, context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.set(index, value);
+          onChanged();
+        } else {
+          contextsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder setContexts(
+          int index, context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.add(value);
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          int index, context.ContextOuterClass.Context value) {
+        if (contextsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureContextsIsMutable();
+          contexts_.add(index, value);
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.add(builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addContexts(
+          int index, context.ContextOuterClass.Context.Builder builderForValue) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          contextsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder addAllContexts(
+          java.lang.Iterable<? extends context.ContextOuterClass.Context> values) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, contexts_);
+          onChanged();
+        } else {
+          contextsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder clearContexts() {
+        if (contextsBuilder_ == null) {
+          contexts_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          contextsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public Builder removeContexts(int index) {
+        if (contextsBuilder_ == null) {
+          ensureContextsIsMutable();
+          contexts_.remove(index);
+          onChanged();
+        } else {
+          contextsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder getContextsBuilder(
+          int index) {
+        return getContextsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+          int index) {
+        if (contextsBuilder_ == null) {
+          return contexts_.get(index);  } else {
+          return contextsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
+           getContextsOrBuilderList() {
+        if (contextsBuilder_ != null) {
+          return contextsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(contexts_);
+        }
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder addContextsBuilder() {
+        return getContextsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Context.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public context.ContextOuterClass.Context.Builder addContextsBuilder(
+          int index) {
+        return getContextsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Context.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Context contexts = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Context.Builder> 
+           getContextsBuilderList() {
+        return getContextsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> 
+          getContextsFieldBuilder() {
+        if (contextsBuilder_ == null) {
+          contextsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder>(
+                  contexts_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          contexts_ = null;
+        }
+        return contextsBuilder_;
+      }
+      @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.ContextList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextList)
+    private static final context.ContextOuterClass.ContextList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextList();
+    }
+
+    public static context.ContextOuterClass.ContextList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextList>
+        PARSER = new com.google.protobuf.AbstractParser<ContextList>() {
+      @java.lang.Override
+      public ContextList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.ContextEvent}
+   */
+  public static final class ContextEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextEvent)
+      ContextEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextEvent.newBuilder() to construct.
+    private ContextEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextEvent(
+        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.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.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = 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 context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.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;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    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 (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (contextId_ != null) {
+        output.writeMessage(2, getContextId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getContextId());
+      }
+      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.ContextEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextEvent other = (context.ContextOuterClass.ContextEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) 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 (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent 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.ContextEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ContextEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent 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.ContextEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent 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.ContextEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextEvent 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.ContextEvent 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.ContextEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ContextEvent)
+        context.ContextOuterClass.ContextEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextEvent.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 (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent build() {
+        context.ContextOuterClass.ContextEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextEvent buildPartial() {
+        context.ContextOuterClass.ContextEvent result = new context.ContextOuterClass.ContextEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.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.ContextEvent) {
+          return mergeFrom((context.ContextOuterClass.ContextEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ContextEvent other) {
+        if (other == context.ContextOuterClass.ContextEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        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.ContextEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      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.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 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;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      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 {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 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;
+        }
+        return eventBuilder_;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+      @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.ContextEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ContextEvent)
+    private static final context.ContextOuterClass.ContextEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextEvent();
+    }
+
+    public static context.ContextOuterClass.ContextEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ContextEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ContextEvent>() {
+      @java.lang.Override
+      public ContextEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ContextEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ContextEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ContextEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    boolean hasContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    context.ContextOuterClass.ContextId getContextId();
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return Whether the topologyUuid field is set.
+     */
+    boolean hasTopologyUuid();
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return The topologyUuid.
+     */
+    context.ContextOuterClass.Uuid getTopologyUuid();
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Topology ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.TopologyId}
+   */
+  public static final class TopologyId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyId)
+      TopologyIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyId.newBuilder() to construct.
+    private TopologyId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyId(
+        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.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
+              }
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (topologyUuid_ != null) {
+                subBuilder = topologyUuid_.toBuilder();
+              }
+              topologyUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyUuid_);
+                topologyUuid_ = 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 context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+    }
+
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextId() {
+      return contextId_ != null;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    }
+    /**
+     * <code>.context.ContextId context_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
+    }
+
+    public static final int TOPOLOGY_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid topologyUuid_;
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return Whether the topologyUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyUuid() {
+      return topologyUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     * @return The topologyUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getTopologyUuid() {
+      return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+    }
+    /**
+     * <code>.context.Uuid topology_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
+      return getTopologyUuid();
+    }
+
+    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 (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (topologyUuid_ != null) {
+        output.writeMessage(2, getTopologyUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextId());
+      }
+      if (topologyUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyUuid());
+      }
+      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.TopologyId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyId other = (context.ContextOuterClass.TopologyId) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasTopologyUuid() != other.hasTopologyUuid()) return false;
+      if (hasTopologyUuid()) {
+        if (!getTopologyUuid()
+            .equals(other.getTopologyUuid())) 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 (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasTopologyUuid()) {
+        hash = (37 * hash) + TOPOLOGY_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId 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.TopologyId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId 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.TopologyId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId 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.TopologyId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyId 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.TopologyId 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;
+    }
+    /**
+     * <pre>
+     * ----- Topology ------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.TopologyId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyId)
+        context.ContextOuterClass.TopologyIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyId.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 (contextIdBuilder_ == null) {
+          contextId_ = null;
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = null;
+        } else {
+          topologyUuid_ = null;
+          topologyUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId build() {
+        context.ContextOuterClass.TopologyId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyId buildPartial() {
+        context.ContextOuterClass.TopologyId result = new context.ContextOuterClass.TopologyId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (topologyUuidBuilder_ == null) {
+          result.topologyUuid_ = topologyUuid_;
+        } else {
+          result.topologyUuid_ = topologyUuidBuilder_.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.TopologyId) {
+          return mergeFrom((context.ContextOuterClass.TopologyId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyId other) {
+        if (other == context.ContextOuterClass.TopologyId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasTopologyUuid()) {
+          mergeTopologyUuid(other.getTopologyUuid());
+        }
+        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.TopologyId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
+       */
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
+       */
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        } else {
+          return contextIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextId_ = value;
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
+          }
+          onChanged();
+        } else {
+          contextIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
+          onChanged();
+        } else {
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
+        } else {
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+        }
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
+        }
+        return contextIdBuilder_;
+      }
+
+      private context.ContextOuterClass.Uuid topologyUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> topologyUuidBuilder_;
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       * @return Whether the topologyUuid field is set.
+       */
+      public boolean hasTopologyUuid() {
+        return topologyUuidBuilder_ != null || topologyUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       * @return The topologyUuid.
+       */
+      public context.ContextOuterClass.Uuid getTopologyUuid() {
+        if (topologyUuidBuilder_ == null) {
+          return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+        } else {
+          return topologyUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder setTopologyUuid(context.ContextOuterClass.Uuid value) {
+        if (topologyUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          topologyUuid_ = value;
+          onChanged();
+        } else {
+          topologyUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder setTopologyUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          topologyUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder mergeTopologyUuid(context.ContextOuterClass.Uuid value) {
+        if (topologyUuidBuilder_ == null) {
+          if (topologyUuid_ != null) {
+            topologyUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(topologyUuid_).mergeFrom(value).buildPartial();
+          } else {
+            topologyUuid_ = value;
+          }
+          onChanged();
+        } else {
+          topologyUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public Builder clearTopologyUuid() {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuid_ = null;
+          onChanged();
+        } else {
+          topologyUuid_ = null;
+          topologyUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getTopologyUuidBuilder() {
+        
+        onChanged();
+        return getTopologyUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
+        if (topologyUuidBuilder_ != null) {
+          return topologyUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid topology_uuid = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getTopologyUuidFieldBuilder() {
+        if (topologyUuidBuilder_ == null) {
+          topologyUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getTopologyUuid(),
+                  getParentForChildren(),
+                  isClean());
+          topologyUuid_ = null;
+        }
+        return topologyUuidBuilder_;
+      }
+      @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.TopologyId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyId)
+    private static final context.ContextOuterClass.TopologyId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyId();
+    }
+
+    public static context.ContextOuterClass.TopologyId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyId>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyId>() {
+      @java.lang.Override
+      public TopologyId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Topology)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    context.ContextOuterClass.LinkId getLinkIds(int index);
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    int getLinkIdsCount();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Topology}
+   */
+  public static final class Topology extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Topology)
+      TopologyOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Topology.newBuilder() to construct.
+    private Topology(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Topology() {
+      deviceIds_ = java.util.Collections.emptyList();
+      linkIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Topology();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Topology(
+        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.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.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)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+    }
+
+    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.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.get(index);
+    }
+
+    public static final int LINK_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getLinkIdsCount() {
+      return linkIds_.size();
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index) {
+      return linkIds_.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 {
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        output.writeMessage(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(3, linkIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getTopologyId());
+      }
+      for (int i = 0; i < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, deviceIds_.get(i));
+      }
+      for (int i = 0; i < linkIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, linkIds_.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.Topology)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Topology other = (context.ContextOuterClass.Topology) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) return false;
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) 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 (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().hashCode();
+      }
+      if (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology 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.Topology parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Topology parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology 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.Topology parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology 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.Topology parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Topology 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.Topology 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.Topology}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Topology)
+        context.ContextOuterClass.TopologyOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Topology.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+          getLinkIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+        return context.ContextOuterClass.Topology.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology build() {
+        context.ContextOuterClass.Topology result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Topology buildPartial() {
+        context.ContextOuterClass.Topology result = new context.ContextOuterClass.Topology(this);
+        int from_bitField0_ = bitField0_;
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.build();
+        }
+        if (linkIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.linkIds_ = linkIds_;
+        } else {
+          result.linkIds_ = linkIdsBuilder_.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.Topology) {
+          return mergeFrom((context.ContextOuterClass.Topology)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Topology other) {
+        if (other == context.ContextOuterClass.Topology.getDefaultInstance()) return this;
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              linkIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinkIdsFieldBuilder() : null;
+            } else {
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
+            }
+          }
+        }
+        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.Topology parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Topology) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      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 {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <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_;
+        }
+      }
+      /**
+       * <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 java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
+        java.util.Collections.emptyList();
+      private void ensureLinkIdsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
+
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        } else {
+          return linkIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
+        } else {
+          return linkIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
+        } else {
+          return linkIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkIds_);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
+          onChanged();
+        } else {
+          linkIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+          int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          linkIds_ = null;
+        }
+        return linkIdsBuilder_;
+      }
+      @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.Topology)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Topology)
+    private static final context.ContextOuterClass.Topology DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Topology();
+    }
+
+    public static context.ContextOuterClass.Topology getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Topology>
+        PARSER = new com.google.protobuf.AbstractParser<Topology>() {
+      @java.lang.Override
+      public Topology parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Topology(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Topology> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Topology> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.TopologyId> 
+        getTopologyIdsList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    int getTopologyIdsCount();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList();
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.TopologyIdList}
+   */
+  public static final class TopologyIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
+      TopologyIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyIdList.newBuilder() to construct.
+    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyIdList() {
+      topologyIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyIdList(
+        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)) {
+                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologyIds_.add(
+                  input.readMessage(context.ContextOuterClass.TopologyId.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)) {
+          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+    }
+
+    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+        getTopologyIdsOrBuilderList() {
+      return topologyIds_;
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getTopologyIdsCount() {
+      return topologyIds_.size();
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+      return topologyIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+        int index) {
+      return topologyIds_.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 < topologyIds_.size(); i++) {
+        output.writeMessage(1, topologyIds_.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 < topologyIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, topologyIds_.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.TopologyIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
+
+      if (!getTopologyIdsList()
+          .equals(other.getTopologyIdsList())) 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 (getTopologyIdsCount() > 0) {
+        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList 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.TopologyIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList 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.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList 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.TopologyIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyIdList 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.TopologyIdList 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.TopologyIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
+        context.ContextOuterClass.TopologyIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologyIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList build() {
+        context.ContextOuterClass.TopologyIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyIdList buildPartial() {
+        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologyIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologyIds_ = topologyIds_;
+        } else {
+          result.topologyIds_ = topologyIdsBuilder_.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.TopologyIdList) {
+          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
+        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
+        if (topologyIdsBuilder_ == null) {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIds_.isEmpty()) {
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologyIdsIsMutable();
+              topologyIds_.addAll(other.topologyIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologyIds_.isEmpty()) {
+            if (topologyIdsBuilder_.isEmpty()) {
+              topologyIdsBuilder_.dispose();
+              topologyIdsBuilder_ = null;
+              topologyIds_ = other.topologyIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologyIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologyIdsFieldBuilder() : null;
+            } else {
+              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+            }
+          }
+        }
+        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.TopologyIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologyIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
+        if (topologyIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        } else {
+          return topologyIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public int getTopologyIdsCount() {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.size();
+        } else {
+          return topologyIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);
+        } else {
+          return topologyIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder setTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId value) {
+        if (topologyIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, value);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addTopologyIds(
+          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder addAllTopologyIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologyIds_);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder clearTopologyIds() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public Builder removeTopologyIds(int index) {
+        if (topologyIdsBuilder_ == null) {
+          ensureTopologyIdsIsMutable();
+          topologyIds_.remove(index);
+          onChanged();
+        } else {
+          topologyIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+          int index) {
+        if (topologyIdsBuilder_ == null) {
+          return topologyIds_.get(index);  } else {
+          return topologyIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
+           getTopologyIdsOrBuilderList() {
+        if (topologyIdsBuilder_ != null) {
+          return topologyIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologyIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
+          int index) {
+        return getTopologyIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
+           getTopologyIdsBuilderList() {
+        return getTopologyIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
+          getTopologyIdsFieldBuilder() {
+        if (topologyIdsBuilder_ == null) {
+          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
+                  topologyIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologyIds_ = null;
+        }
+        return topologyIdsBuilder_;
+      }
+      @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.TopologyIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
+    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
+    }
+
+    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyIdList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
+      @java.lang.Override
+      public TopologyIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Topology> 
+        getTopologiesList();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    context.ContextOuterClass.Topology getTopologies(int index);
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    int getTopologiesCount();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList();
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.TopologyList}
+   */
+  public static final class TopologyList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyList)
+      TopologyListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyList.newBuilder() to construct.
+    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyList() {
+      topologies_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyList(
+        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)) {
+                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              topologies_.add(
+                  input.readMessage(context.ContextOuterClass.Topology.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)) {
+          topologies_ = java.util.Collections.unmodifiableList(topologies_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+    }
+
+    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Topology> topologies_;
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+      return topologies_;
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+        getTopologiesOrBuilderList() {
+      return topologies_;
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public int getTopologiesCount() {
+      return topologies_.size();
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Topology getTopologies(int index) {
+      return topologies_.get(index);
+    }
+    /**
+     * <code>repeated .context.Topology topologies = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+        int index) {
+      return topologies_.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 < topologies_.size(); i++) {
+        output.writeMessage(1, topologies_.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 < topologies_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, topologies_.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.TopologyList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
+
+      if (!getTopologiesList()
+          .equals(other.getTopologiesList())) 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 (getTopologiesCount() > 0) {
+        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologiesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList 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.TopologyList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList 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.TopologyList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList 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.TopologyList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyList 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.TopologyList 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.TopologyList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyList)
+        context.ContextOuterClass.TopologyListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getTopologiesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          topologiesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList build() {
+        context.ContextOuterClass.TopologyList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyList buildPartial() {
+        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
+        int from_bitField0_ = bitField0_;
+        if (topologiesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            topologies_ = java.util.Collections.unmodifiableList(topologies_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.topologies_ = topologies_;
+        } else {
+          result.topologies_ = topologiesBuilder_.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.TopologyList) {
+          return mergeFrom((context.ContextOuterClass.TopologyList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
+        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
+        if (topologiesBuilder_ == null) {
+          if (!other.topologies_.isEmpty()) {
+            if (topologies_.isEmpty()) {
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureTopologiesIsMutable();
+              topologies_.addAll(other.topologies_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.topologies_.isEmpty()) {
+            if (topologiesBuilder_.isEmpty()) {
+              topologiesBuilder_.dispose();
+              topologiesBuilder_ = null;
+              topologies_ = other.topologies_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              topologiesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getTopologiesFieldBuilder() : null;
+            } else {
+              topologiesBuilder_.addAllMessages(other.topologies_);
+            }
+          }
+        }
+        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.TopologyList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
+        java.util.Collections.emptyList();
+      private void ensureTopologiesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
+
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
+        if (topologiesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(topologies_);
+        } else {
+          return topologiesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public int getTopologiesCount() {
+        if (topologiesBuilder_ == null) {
+          return topologies_.size();
+        } else {
+          return topologiesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology getTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);
+        } else {
+          return topologiesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.set(index, value);
+          onChanged();
+        } else {
+          topologiesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder setTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(value);
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology value) {
+        if (topologiesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureTopologiesIsMutable();
+          topologies_.add(index, value);
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addTopologies(
+          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          topologiesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder addAllTopologies(
+          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, topologies_);
+          onChanged();
+        } else {
+          topologiesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder clearTopologies() {
+        if (topologiesBuilder_ == null) {
+          topologies_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          topologiesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public Builder removeTopologies(int index) {
+        if (topologiesBuilder_ == null) {
+          ensureTopologiesIsMutable();
+          topologies_.remove(index);
+          onChanged();
+        } else {
+          topologiesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
+          int index) {
+        if (topologiesBuilder_ == null) {
+          return topologies_.get(index);  } else {
+          return topologiesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
+           getTopologiesOrBuilderList() {
+        if (topologiesBuilder_ != null) {
+          return topologiesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(topologies_);
+        }
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
+        return getTopologiesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Topology.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
+          int index) {
+        return getTopologiesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Topology.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Topology topologies = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Topology.Builder> 
+           getTopologiesBuilderList() {
+        return getTopologiesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
+          getTopologiesFieldBuilder() {
+        if (topologiesBuilder_ == null) {
+          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
+                  topologies_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          topologies_ = null;
+        }
+        return topologiesBuilder_;
+      }
+      @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.TopologyList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyList)
+    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
+    }
+
+    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyList>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
+      @java.lang.Override
+      public TopologyList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface TopologyEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.TopologyEvent}
+   */
+  public static final class TopologyEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
+      TopologyEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TopologyEvent.newBuilder() to construct.
+    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TopologyEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TopologyEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TopologyEvent(
+        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.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.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = 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 context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.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;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.TopologyId topologyId_;
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return Whether the topologyId field is set.
+     */
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     * @return The topologyId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    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 (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        output.writeMessage(2, getTopologyId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (topologyId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getTopologyId());
+      }
+      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.TopologyEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) 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 (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();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent 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.TopologyEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent 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.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent 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.TopologyEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TopologyEvent 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.TopologyEvent 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.TopologyEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
+        context.ContextOuterClass.TopologyEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TopologyEvent.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 (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent build() {
+        context.ContextOuterClass.TopologyEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TopologyEvent buildPartial() {
+        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.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.TopologyEvent) {
+          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
+        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasTopologyId()) {
+          mergeTopologyId(other.getTopologyId());
+        }
+        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.TopologyEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      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.
+       */
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        } else {
+          return eventBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
+          onChanged();
+        } else {
+          eventBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 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;
+          }
+          onChanged();
+        } else {
+          eventBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
+          onChanged();
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       */
+      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 {
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
+      }
+      /**
+       * <code>.context.Event event = 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;
+        }
+        return eventBuilder_;
+      }
+
+      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 = 2;</code>
+       * @return Whether the topologyId field is set.
+       */
+      public boolean hasTopologyId() {
+        return topologyIdBuilder_ != null || topologyId_ != null;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</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 = 2;</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 = 2;</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 = 2;</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 = 2;</code>
+       */
+      public Builder clearTopologyId() {
+        if (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+          onChanged();
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</code>
+       */
+      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+        if (topologyIdBuilder_ != null) {
+          return topologyIdBuilder_.getMessageOrBuilder();
+        } else {
+          return topologyId_ == null ?
+              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+        }
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 2;</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_;
+      }
+      @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.TopologyEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
+    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
+    }
+
+    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TopologyEvent>
+        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
+      @java.lang.Override
+      public TopologyEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TopologyEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TopologyEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
+     */
+    boolean hasDeviceUuid();
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
+     */
+    context.ContextOuterClass.Uuid getDeviceUuid();
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Device --------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.DeviceId}
+   */
+  public static final class DeviceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceId)
+      DeviceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceId.newBuilder() to construct.
+    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceId(
+        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 (deviceUuid_ != null) {
+                subBuilder = deviceUuid_.toBuilder();
+              }
+              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceUuid_);
+                deviceUuid_ = 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 context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+    }
+
+    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid deviceUuid_;
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return Whether the deviceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceUuid() {
+      return deviceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     * @return The deviceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getDeviceUuid() {
+      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+    }
+    /**
+     * <code>.context.Uuid device_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+      return getDeviceUuid();
+    }
+
+    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 (deviceUuid_ != null) {
+        output.writeMessage(1, getDeviceUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (deviceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDeviceUuid());
+      }
+      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.DeviceId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
+
+      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
+      if (hasDeviceUuid()) {
+        if (!getDeviceUuid()
+            .equals(other.getDeviceUuid())) 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 (hasDeviceUuid()) {
+        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId 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.DeviceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId 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.DeviceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId 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.DeviceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceId 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.DeviceId 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;
+    }
+    /**
+     * <pre>
+     * ----- Device --------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.DeviceId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceId)
+        context.ContextOuterClass.DeviceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceId.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 (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
+        } else {
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId build() {
+        context.ContextOuterClass.DeviceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceId buildPartial() {
+        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
+        if (deviceUuidBuilder_ == null) {
+          result.deviceUuid_ = deviceUuid_;
+        } else {
+          result.deviceUuid_ = deviceUuidBuilder_.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.DeviceId) {
+          return mergeFrom((context.ContextOuterClass.DeviceId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
+        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
+        if (other.hasDeviceUuid()) {
+          mergeDeviceUuid(other.getDeviceUuid());
+        }
+        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.DeviceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid deviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return Whether the deviceUuid field is set.
+       */
+      public boolean hasDeviceUuid() {
+        return deviceUuidBuilder_ != null || deviceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       * @return The deviceUuid.
+       */
+      public context.ContextOuterClass.Uuid getDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+        } else {
+          return deviceUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceUuid_ = value;
+          onChanged();
+        } else {
+          deviceUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder setDeviceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
+        if (deviceUuidBuilder_ == null) {
+          if (deviceUuid_ != null) {
+            deviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            deviceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          deviceUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public Builder clearDeviceUuid() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuid_ = null;
+          onChanged();
+        } else {
+          deviceUuid_ = null;
+          deviceUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
+        
+        onChanged();
+        return getDeviceUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
+        if (deviceUuidBuilder_ != null) {
+          return deviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid device_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getDeviceUuidFieldBuilder() {
+        if (deviceUuidBuilder_ == null) {
+          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getDeviceUuid(),
+                  getParentForChildren(),
+                  isClean());
+          deviceUuid_ = null;
+        }
+        return deviceUuidBuilder_;
+      }
+      @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.DeviceId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceId)
+    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+    }
+
+    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceId>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
+      @java.lang.Override
+      public DeviceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Device)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The deviceType.
+     */
+    java.lang.String getDeviceType();
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The bytes for deviceType.
+     */
+    com.google.protobuf.ByteString
+        getDeviceTypeBytes();
+
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    boolean hasDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    context.ContextOuterClass.DeviceConfig getDeviceConfig();
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
+
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    int getDeviceOperationalStatusValue();
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The deviceOperationalStatus.
+     */
+    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
+
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return The count of deviceDrivers.
+     */
+    int getDeviceDriversCount();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    java.util.List<java.lang.Integer>
+    getDeviceDriversValueList();
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    int getDeviceDriversValue(int index);
+
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPoint> 
+        getDeviceEndpointsList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    int getDeviceEndpointsCount();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Device}
+   */
+  public static final class Device extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Device)
+      DeviceOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Device.newBuilder() to construct.
+    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Device() {
+      deviceType_ = "";
+      deviceOperationalStatus_ = 0;
+      deviceDrivers_ = java.util.Collections.emptyList();
+      deviceEndpoints_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Device();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Device(
+        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.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 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              deviceType_ = s;
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
+              if (deviceConfig_ != null) {
+                subBuilder = deviceConfig_.toBuilder();
+              }
+              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(deviceConfig_);
+                deviceConfig_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+
+              deviceOperationalStatus_ = rawValue;
+              break;
+            }
+            case 40: {
+              int rawValue = input.readEnum();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceDrivers_.add(rawValue);
+              break;
+            }
+            case 42: {
+              int length = input.readRawVarint32();
+              int oldLimit = input.pushLimit(length);
+              while(input.getBytesUntilLimit() > 0) {
+                int rawValue = input.readEnum();
+                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                  mutable_bitField0_ |= 0x00000001;
+                }
+                deviceDrivers_.add(rawValue);
+              }
+              input.popLimit(oldLimit);
+              break;
+            }
+            case 50: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              deviceEndpoints_.add(
+                  input.readMessage(context.ContextOuterClass.EndPoint.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)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Device_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+    }
+
+    public static final int DEVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.DeviceId deviceId_;
+    /**
+     * <code>.context.DeviceId device_id = 1;</code>
+     * @return Whether the deviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 1;</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 = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    public static final int DEVICE_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object deviceType_;
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The deviceType.
+     */
+    @java.lang.Override
+    public java.lang.String getDeviceType() {
+      java.lang.Object ref = deviceType_;
+      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();
+        deviceType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string device_type = 2;</code>
+     * @return The bytes for deviceType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getDeviceTypeBytes() {
+      java.lang.Object ref = deviceType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        deviceType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
+    private context.ContextOuterClass.DeviceConfig deviceConfig_;
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return Whether the deviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasDeviceConfig() {
+      return deviceConfig_ != null;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     * @return The deviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+    }
+    /**
+     * <code>.context.DeviceConfig device_config = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+      return getDeviceConfig();
+    }
+
+    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 4;
+    private int deviceOperationalStatus_;
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The enum numeric value on the wire for deviceOperationalStatus.
+     */
+    @java.lang.Override public int getDeviceOperationalStatusValue() {
+      return deviceOperationalStatus_;
+    }
+    /**
+     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+     * @return The deviceOperationalStatus.
+     */
+    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 5;
+    private java.util.List<java.lang.Integer> deviceDrivers_;
+    private static final com.google.protobuf.Internal.ListAdapter.Converter<
+        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
+            new com.google.protobuf.Internal.ListAdapter.Converter<
+                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
+              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
+                @SuppressWarnings("deprecation")
+                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
+                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
+              }
+            };
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+      return new com.google.protobuf.Internal.ListAdapter<
+          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return The count of deviceDrivers.
+     */
+    @java.lang.Override
+    public int getDeviceDriversCount() {
+      return deviceDrivers_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the element to return.
+     * @return The deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @return A list containing the enum numeric values on the wire for deviceDrivers.
+     */
+    @java.lang.Override
+    public java.util.List<java.lang.Integer>
+    getDeviceDriversValueList() {
+      return deviceDrivers_;
+    }
+    /**
+     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+     * @param index The index of the value to return.
+     * @return The enum numeric value on the wire of deviceDrivers at the given index.
+     */
+    @java.lang.Override
+    public int getDeviceDriversValue(int index) {
+      return deviceDrivers_.get(index);
+    }
+    private int deviceDriversMemoizedSerializedSize;
+
+    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 6;
+    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+        getDeviceEndpointsOrBuilderList() {
+      return deviceEndpoints_;
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public int getDeviceEndpointsCount() {
+      return deviceEndpoints_.size();
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+      return deviceEndpoints_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+        int index) {
+      return deviceEndpoints_.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 {
+      getSerializedSize();
+      if (deviceId_ != null) {
+        output.writeMessage(1, getDeviceId());
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        output.writeMessage(3, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(4, deviceOperationalStatus_);
+      }
+      if (getDeviceDriversList().size() > 0) {
+        output.writeUInt32NoTag(42);
+        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
+      }
+      for (int i = 0; i < deviceDrivers_.size(); i++) {
+        output.writeEnumNoTag(deviceDrivers_.get(i));
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        output.writeMessage(6, deviceEndpoints_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDeviceId());
+      }
+      if (!getDeviceTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceType_);
+      }
+      if (deviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getDeviceConfig());
+      }
+      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(4, deviceOperationalStatus_);
+      }
+      {
+        int dataSize = 0;
+        for (int i = 0; i < deviceDrivers_.size(); i++) {
+          dataSize += com.google.protobuf.CodedOutputStream
+            .computeEnumSizeNoTag(deviceDrivers_.get(i));
+        }
+        size += dataSize;
+        if (!getDeviceDriversList().isEmpty()) {  size += 1;
+          size += com.google.protobuf.CodedOutputStream
+            .computeUInt32SizeNoTag(dataSize);
+        }deviceDriversMemoizedSerializedSize = dataSize;
+      }
+      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, deviceEndpoints_.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.Device)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
+
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (!getDeviceType()
+          .equals(other.getDeviceType())) return false;
+      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
+      if (hasDeviceConfig()) {
+        if (!getDeviceConfig()
+            .equals(other.getDeviceConfig())) return false;
+      }
+      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
+      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
+      if (!getDeviceEndpointsList()
+          .equals(other.getDeviceEndpointsList())) 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 (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + getDeviceType().hashCode();
+      if (hasDeviceConfig()) {
+        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceConfig().hashCode();
+      }
+      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + deviceOperationalStatus_;
+      if (getDeviceDriversCount() > 0) {
+        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
+        hash = (53 * hash) + deviceDrivers_.hashCode();
+      }
+      if (getDeviceEndpointsCount() > 0) {
+        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Device parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device 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.Device parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Device parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device 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.Device parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device 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.Device parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Device 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.Device 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.Device}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Device)
+        context.ContextOuterClass.DeviceOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Device.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceEndpointsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        deviceType_ = "";
+
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+        deviceOperationalStatus_ = 0;
+
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device getDefaultInstanceForType() {
+        return context.ContextOuterClass.Device.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device build() {
+        context.ContextOuterClass.Device result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Device buildPartial() {
+        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        result.deviceType_ = deviceType_;
+        if (deviceConfigBuilder_ == null) {
+          result.deviceConfig_ = deviceConfig_;
+        } else {
+          result.deviceConfig_ = deviceConfigBuilder_.build();
+        }
+        result.deviceOperationalStatus_ = deviceOperationalStatus_;
+        if (((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.deviceDrivers_ = deviceDrivers_;
+        if (deviceEndpointsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.deviceEndpoints_ = deviceEndpoints_;
+        } else {
+          result.deviceEndpoints_ = deviceEndpointsBuilder_.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.Device) {
+          return mergeFrom((context.ContextOuterClass.Device)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Device other) {
+        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        if (!other.getDeviceType().isEmpty()) {
+          deviceType_ = other.deviceType_;
+          onChanged();
+        }
+        if (other.hasDeviceConfig()) {
+          mergeDeviceConfig(other.getDeviceConfig());
+        }
+        if (other.deviceOperationalStatus_ != 0) {
+          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
+        }
+        if (!other.deviceDrivers_.isEmpty()) {
+          if (deviceDrivers_.isEmpty()) {
+            deviceDrivers_ = other.deviceDrivers_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureDeviceDriversIsMutable();
+            deviceDrivers_.addAll(other.deviceDrivers_);
+          }
+          onChanged();
+        }
+        if (deviceEndpointsBuilder_ == null) {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpoints_.isEmpty()) {
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureDeviceEndpointsIsMutable();
+              deviceEndpoints_.addAll(other.deviceEndpoints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceEndpoints_.isEmpty()) {
+            if (deviceEndpointsBuilder_.isEmpty()) {
+              deviceEndpointsBuilder_.dispose();
+              deviceEndpointsBuilder_ = null;
+              deviceEndpoints_ = other.deviceEndpoints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              deviceEndpointsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceEndpointsFieldBuilder() : null;
+            } else {
+              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
+            }
+          }
+        }
+        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.Device parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      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 = 1;</code>
+       * @return Whether the deviceId field is set.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 1;</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 = 1;</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 java.lang.Object deviceType_ = "";
+      /**
+       * <code>string device_type = 2;</code>
+       * @return The deviceType.
+       */
+      public java.lang.String getDeviceType() {
+        java.lang.Object ref = deviceType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          deviceType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @return The bytes for deviceType.
+       */
+      public com.google.protobuf.ByteString
+          getDeviceTypeBytes() {
+        java.lang.Object ref = deviceType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          deviceType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @param value The deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceType() {
+        
+        deviceType_ = getDefaultInstance().getDeviceType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string device_type = 2;</code>
+       * @param value The bytes for deviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        deviceType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private context.ContextOuterClass.DeviceConfig deviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return Whether the deviceConfig field is set.
+       */
+      public boolean hasDeviceConfig() {
+        return deviceConfigBuilder_ != null || deviceConfig_ != null;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       * @return The deviceConfig.
+       */
+      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        } else {
+          return deviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceConfig_ = value;
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder setDeviceConfig(
+          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
+        if (deviceConfigBuilder_ == null) {
+          if (deviceConfig_ != null) {
+            deviceConfig_ =
+              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            deviceConfig_ = value;
+          }
+          onChanged();
+        } else {
+          deviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public Builder clearDeviceConfig() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfig_ = null;
+          onChanged();
+        } else {
+          deviceConfig_ = null;
+          deviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
+        
+        onChanged();
+        return getDeviceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
+        if (deviceConfigBuilder_ != null) {
+          return deviceConfigBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceConfig_ == null ?
+              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.DeviceConfig device_config = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
+          getDeviceConfigFieldBuilder() {
+        if (deviceConfigBuilder_ == null) {
+          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
+                  getDeviceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          deviceConfig_ = null;
+        }
+        return deviceConfigBuilder_;
+      }
+
+      private int deviceOperationalStatus_ = 0;
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return The enum numeric value on the wire for deviceOperationalStatus.
+       */
+      @java.lang.Override public int getDeviceOperationalStatusValue() {
+        return deviceOperationalStatus_;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatusValue(int value) {
+        
+        deviceOperationalStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return The deviceOperationalStatus.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
+        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @param value The deviceOperationalStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        deviceOperationalStatus_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceOperationalStatus() {
+        
+        deviceOperationalStatus_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<java.lang.Integer> deviceDrivers_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceDriversIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
+          bitField0_ |= 0x00000001;
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return A list containing the deviceDrivers.
+       */
+      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
+        return new com.google.protobuf.Internal.ListAdapter<
+            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return The count of deviceDrivers.
+       */
+      public int getDeviceDriversCount() {
+        return deviceDrivers_.size();
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the element to return.
+       * @return The deviceDrivers at the given index.
+       */
+      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
+        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index to set the value at.
+       * @param value The deviceDrivers to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDrivers(
+          int index, context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param value The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value.getNumber());
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param values The deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDrivers(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
+        ensureDeviceDriversIsMutable();
+        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
+          deviceDrivers_.add(value.getNumber());
+        }
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDeviceDrivers() {
+        deviceDrivers_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @return A list containing the enum numeric values on the wire for deviceDrivers.
+       */
+      public java.util.List<java.lang.Integer>
+      getDeviceDriversValueList() {
+        return java.util.Collections.unmodifiableList(deviceDrivers_);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       */
+      public int getDeviceDriversValue(int index) {
+        return deviceDrivers_.get(index);
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param index The index of the value to return.
+       * @return The enum numeric value on the wire of deviceDrivers at the given index.
+       * @return This builder for chaining.
+       */
+      public Builder setDeviceDriversValue(
+          int index, int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.set(index, value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param value The enum numeric value on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addDeviceDriversValue(int value) {
+        ensureDeviceDriversIsMutable();
+        deviceDrivers_.add(value);
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
+       * @param values The enum numeric values on the wire for deviceDrivers to add.
+       * @return This builder for chaining.
+       */
+      public Builder addAllDeviceDriversValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureDeviceDriversIsMutable();
+        for (int value : values) {
+          deviceDrivers_.add(value);
+        }
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceEndpointsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
+
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
+        if (deviceEndpointsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        } else {
+          return deviceEndpointsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public int getDeviceEndpointsCount() {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.size();
+        } else {
+          return deviceEndpointsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);
+        } else {
+          return deviceEndpointsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder setDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint value) {
+        if (deviceEndpointsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, value);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addDeviceEndpoints(
+          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder addAllDeviceEndpoints(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceEndpoints_);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder clearDeviceEndpoints() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpoints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public Builder removeDeviceEndpoints(int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          ensureDeviceEndpointsIsMutable();
+          deviceEndpoints_.remove(index);
+          onChanged();
+        } else {
+          deviceEndpointsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+          int index) {
+        if (deviceEndpointsBuilder_ == null) {
+          return deviceEndpoints_.get(index);  } else {
+          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
+           getDeviceEndpointsOrBuilderList() {
+        if (deviceEndpointsBuilder_ != null) {
+          return deviceEndpointsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
+          int index) {
+        return getDeviceEndpointsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
+           getDeviceEndpointsBuilderList() {
+        return getDeviceEndpointsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
+          getDeviceEndpointsFieldBuilder() {
+        if (deviceEndpointsBuilder_ == null) {
+          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
+                  deviceEndpoints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceEndpoints_ = null;
+        }
+        return deviceEndpointsBuilder_;
+      }
+      @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.Device)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Device)
+    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
+    }
+
+    public static context.ContextOuterClass.Device getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Device>
+        PARSER = new com.google.protobuf.AbstractParser<Device>() {
+      @java.lang.Override
+      public Device parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Device(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Device> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Device> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceConfig}
+   */
+  public static final class DeviceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
+      DeviceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceConfig.newBuilder() to construct.
+    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceConfig(
+        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)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.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)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+    }
+
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.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 < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.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 < configRules_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, configRules_.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.DeviceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
+
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) 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 (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.DeviceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig 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.DeviceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig 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.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig 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.DeviceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceConfig 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.DeviceConfig 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.DeviceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
+        context.ContextOuterClass.DeviceConfigOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig build() {
+        context.ContextOuterClass.DeviceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceConfig buildPartial() {
+        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
+        } else {
+          result.configRules_ = configRulesBuilder_.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.DeviceConfig) {
+          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
+        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
+        }
+        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.DeviceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
+        } else {
+          return configRulesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
+        } else {
+          configRulesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          configRulesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
+          onChanged();
+        } else {
+          configRulesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(configRules_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          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());
+          configRules_ = null;
+        }
+        return configRulesBuilder_;
+      }
+      @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.DeviceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
+    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
+    }
+
+    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
+      @java.lang.Override
+      public DeviceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.DeviceId> 
+        getDeviceIdsList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    int getDeviceIdsCount();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceIdList}
+   */
+  public static final class DeviceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
+      DeviceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceIdList.newBuilder() to construct.
+    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceIdList() {
+      deviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceIdList(
+        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)) {
+                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              deviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.DeviceId.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)) {
+          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+    }
+
+    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+        getDeviceIdsOrBuilderList() {
+      return deviceIds_;
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getDeviceIdsCount() {
+      return deviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+      return deviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+        int index) {
+      return deviceIds_.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 < deviceIds_.size(); i++) {
+        output.writeMessage(1, deviceIds_.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 < deviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, deviceIds_.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.DeviceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
+
+      if (!getDeviceIdsList()
+          .equals(other.getDeviceIdsList())) 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 (getDeviceIdsCount() > 0) {
+        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList 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.DeviceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList 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.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList 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.DeviceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceIdList 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.DeviceIdList 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.DeviceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
+        context.ContextOuterClass.DeviceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDeviceIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList build() {
+        context.ContextOuterClass.DeviceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceIdList buildPartial() {
+        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (deviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.deviceIds_ = deviceIds_;
+        } else {
+          result.deviceIds_ = deviceIdsBuilder_.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.DeviceIdList) {
+          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
+        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
+        if (deviceIdsBuilder_ == null) {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIds_.isEmpty()) {
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDeviceIdsIsMutable();
+              deviceIds_.addAll(other.deviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.deviceIds_.isEmpty()) {
+            if (deviceIdsBuilder_.isEmpty()) {
+              deviceIdsBuilder_.dispose();
+              deviceIdsBuilder_ = null;
+              deviceIds_ = other.deviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              deviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDeviceIdsFieldBuilder() : null;
+            } else {
+              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
+            }
+          }
+        }
+        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.DeviceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureDeviceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
+        if (deviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        } else {
+          return deviceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public int getDeviceIdsCount() {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.size();
+        } else {
+          return deviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);
+        } else {
+          return deviceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder setDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId value) {
+        if (deviceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, value);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addDeviceIds(
+          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder addAllDeviceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, deviceIds_);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder clearDeviceIds() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public Builder removeDeviceIds(int index) {
+        if (deviceIdsBuilder_ == null) {
+          ensureDeviceIdsIsMutable();
+          deviceIds_.remove(index);
+          onChanged();
+        } else {
+          deviceIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
+          int index) {
+        if (deviceIdsBuilder_ == null) {
+          return deviceIds_.get(index);  } else {
+          return deviceIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
+           getDeviceIdsOrBuilderList() {
+        if (deviceIdsBuilder_ != null) {
+          return deviceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(deviceIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
+          int index) {
+        return getDeviceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
+           getDeviceIdsBuilderList() {
+        return getDeviceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDeviceIdsFieldBuilder() {
+        if (deviceIdsBuilder_ == null) {
+          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  deviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          deviceIds_ = null;
+        }
+        return deviceIdsBuilder_;
+      }
+      @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.DeviceIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
+    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
+    }
+
+    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
+      @java.lang.Override
+      public DeviceIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Device> 
+        getDevicesList();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    context.ContextOuterClass.Device getDevices(int index);
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    int getDevicesCount();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList();
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.DeviceList}
+   */
+  public static final class DeviceList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceList)
+      DeviceListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceList.newBuilder() to construct.
+    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceList() {
+      devices_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceList(
+        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)) {
+                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              devices_.add(
+                  input.readMessage(context.ContextOuterClass.Device.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)) {
+          devices_ = java.util.Collections.unmodifiableList(devices_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+    }
+
+    public static final int DEVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Device> devices_;
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+        getDevicesOrBuilderList() {
+      return devices_;
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public int getDevicesCount() {
+      return devices_.size();
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Device getDevices(int index) {
+      return devices_.get(index);
+    }
+    /**
+     * <code>repeated .context.Device devices = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+        int index) {
+      return devices_.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 < devices_.size(); i++) {
+        output.writeMessage(1, devices_.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 < devices_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, devices_.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.DeviceList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
+
+      if (!getDevicesList()
+          .equals(other.getDevicesList())) 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 (getDevicesCount() > 0) {
+        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getDevicesList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList 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.DeviceList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList 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.DeviceList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList 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.DeviceList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceList 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.DeviceList 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.DeviceList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceList)
+        context.ContextOuterClass.DeviceListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDevicesFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          devicesBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList build() {
+        context.ContextOuterClass.DeviceList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceList buildPartial() {
+        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
+        int from_bitField0_ = bitField0_;
+        if (devicesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            devices_ = java.util.Collections.unmodifiableList(devices_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.devices_ = devices_;
+        } else {
+          result.devices_ = devicesBuilder_.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.DeviceList) {
+          return mergeFrom((context.ContextOuterClass.DeviceList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
+        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
+        if (devicesBuilder_ == null) {
+          if (!other.devices_.isEmpty()) {
+            if (devices_.isEmpty()) {
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDevicesIsMutable();
+              devices_.addAll(other.devices_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.devices_.isEmpty()) {
+            if (devicesBuilder_.isEmpty()) {
+              devicesBuilder_.dispose();
+              devicesBuilder_ = null;
+              devices_ = other.devices_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              devicesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDevicesFieldBuilder() : null;
+            } else {
+              devicesBuilder_.addAllMessages(other.devices_);
+            }
+          }
+        }
+        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.DeviceList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Device> devices_ =
+        java.util.Collections.emptyList();
+      private void ensureDevicesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
+
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
        */
-      public int getTopologyIdsCount() {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.size();
+      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
+        if (devicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(devices_);
         } else {
-          return topologyIdsBuilder_.getCount();
+          return devicesBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public int getDevicesCount() {
+        if (devicesBuilder_ == null) {
+          return devices_.size();
+        } else {
+          return devicesBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device getDevices(int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);
+        } else {
+          return devicesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.set(index, value);
+          onChanged();
+        } else {
+          devicesBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder setDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.add(value);
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device value) {
+        if (devicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevicesIsMutable();
+          devices_.add(index, value);
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addDevices(
+          int index, context.ContextOuterClass.Device.Builder builderForValue) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          devicesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder addAllDevices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, devices_);
+          onChanged();
+        } else {
+          devicesBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder clearDevices() {
+        if (devicesBuilder_ == null) {
+          devices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          devicesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public Builder removeDevices(int index) {
+        if (devicesBuilder_ == null) {
+          ensureDevicesIsMutable();
+          devices_.remove(index);
+          onChanged();
+        } else {
+          devicesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
+          int index) {
+        return getDevicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
+          int index) {
+        if (devicesBuilder_ == null) {
+          return devices_.get(index);  } else {
+          return devicesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
+           getDevicesOrBuilderList() {
+        if (devicesBuilder_ != null) {
+          return devicesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(devices_);
+        }
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
+        return getDevicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Device.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
+          int index) {
+        return getDevicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Device.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Device devices = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Device.Builder> 
+           getDevicesBuilderList() {
+        return getDevicesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
+          getDevicesFieldBuilder() {
+        if (devicesBuilder_ == null) {
+          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
+                  devices_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          devices_ = null;
+        }
+        return devicesBuilder_;
+      }
+      @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.DeviceList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceList)
+    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
+    }
+
+    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
+      @java.lang.Override
+      public DeviceList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.DeviceEvent}
+   */
+  public static final class DeviceEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
+      DeviceEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceEvent.newBuilder() to construct.
+    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceEvent(
+        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.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.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;
+            }
+            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_DeviceEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.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;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    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.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</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 = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+      return getDeviceId();
+    }
+
+    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 (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      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.DeviceEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) 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 (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasDeviceId()) {
+        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getDeviceId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent 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.DeviceEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent 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.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent 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.DeviceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.DeviceEvent 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.DeviceEvent 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.DeviceEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
+        context.ContextOuterClass.DeviceEventOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          return topologyIdsBuilder_.getMessage(index);
+          event_ = null;
+          eventBuilder_ = null;
         }
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, value);
-          onChanged();
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
         } else {
-          topologyIdsBuilder_.setMessage(index, value);
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
         }
         return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, builderForValue.build());
-          onChanged();
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent build() {
+        context.ContextOuterClass.DeviceEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.DeviceEvent buildPartial() {
+        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+          result.event_ = eventBuilder_.build();
         }
-        return this;
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(value);
-          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 context.ContextOuterClass.DeviceEvent) {
+          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
         } else {
-          topologyIdsBuilder_.addMessage(value);
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
+        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @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.DeviceEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, value);
-          onChanged();
-        } else {
-          topologyIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public Builder addTopologyIds(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(builderForValue.build());
-          onChanged();
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
+      }
+      /**
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
+       */
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          topologyIdsBuilder_.addMessage(builderForValue.build());
+          return eventBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, builderForValue.build());
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addAllTopologyIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologyIds_);
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          topologyIdsBuilder_.addAllMessages(values);
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearTopologyIds() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      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;
+          }
           onChanged();
         } else {
-          topologyIdsBuilder_.clear();
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder removeTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.remove(index);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          topologyIdsBuilder_.remove(index);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-          int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);  } else {
-          return topologyIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-           getTopologyIdsOrBuilderList() {
-        if (topologyIdsBuilder_ != null) {
-          return topologyIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(topologyIds_);
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.TopologyId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 2;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
-           getTopologyIdsBuilderList() {
-        return getTopologyIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdsFieldBuilder() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  topologyIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      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());
-          topologyIds_ = null;
+          event_ = null;
         }
-        return topologyIdsBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
+        return eventBuilder_;
+      }
 
+      private context.ContextOuterClass.DeviceId deviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return Whether the deviceId field is set.
        */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-        if (serviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       * @return The deviceId.
+       */
+      public context.ContextOuterClass.DeviceId getDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
         } else {
-          return serviceIdsBuilder_.getMessageList();
+          return deviceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public int getServiceIdsCount() {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.size();
+      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
+        if (deviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          deviceId_ = value;
+          onChanged();
         } else {
-          return serviceIdsBuilder_.getCount();
+          deviceIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
         } else {
-          return serviceIdsBuilder_.getMessage(index);
+          deviceIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      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;
           }
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, value);
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, value);
+          deviceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
+       * <code>.context.DeviceId device_id = 2;</code>
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, builderForValue.build());
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
           onChanged();
         } else {
-          serviceIdsBuilder_.setMessage(index, builderForValue.build());
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</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 = 2;</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_;
+      }
+      @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.DeviceEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
+    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
+    }
+
+    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
+      @java.lang.Override
+      public DeviceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
+     */
+    boolean hasLinkUuid();
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
+     */
+    context.ContextOuterClass.Uuid getLinkUuid();
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Link ----------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.LinkId}
+   */
+  public static final class LinkId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkId)
+      LinkIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkId.newBuilder() to construct.
+    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkId(
+        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 (linkUuid_ != null) {
+                subBuilder = linkUuid_.toBuilder();
+              }
+              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkUuid_);
+                linkUuid_ = 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 context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+    }
+
+    public static final int LINK_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid linkUuid_;
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return Whether the linkUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkUuid() {
+      return linkUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     * @return The linkUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getLinkUuid() {
+      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+    }
+    /**
+     * <code>.context.Uuid link_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+      return getLinkUuid();
+    }
+
+    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 (linkUuid_ != null) {
+        output.writeMessage(1, getLinkUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (linkUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getLinkUuid());
+      }
+      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.LinkId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
+
+      if (hasLinkUuid() != other.hasLinkUuid()) return false;
+      if (hasLinkUuid()) {
+        if (!getLinkUuid()
+            .equals(other.getLinkUuid())) 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 (hasLinkUuid()) {
+        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkUuid().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId 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.LinkId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId 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.LinkId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId 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.LinkId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkId 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.LinkId 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;
+    }
+    /**
+     * <pre>
+     * ----- Link ----------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.LinkId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.LinkId)
+        context.ContextOuterClass.LinkIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(value);
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
         } else {
-          serviceIdsBuilder_.addMessage(value);
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
         }
         return this;
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, value);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder addServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkId.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addMessage(index, builderForValue.build());
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId build() {
+        context.ContextOuterClass.LinkId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder addAllServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceIds_);
-          onChanged();
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId buildPartial() {
+        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
+        if (linkUuidBuilder_ == null) {
+          result.linkUuid_ = linkUuid_;
         } else {
-          serviceIdsBuilder_.addAllMessages(values);
+          result.linkUuid_ = linkUuidBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder clearServiceIds() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.clear();
-        }
-        return this;
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public Builder removeServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.remove(index);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.remove(index);
-        }
-        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 .context.ServiceId service_ids = 3;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().getBuilder(index);
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-          int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);  } else {
-          return serviceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceIdsOrBuilderList() {
-        if (serviceIdsBuilder_ != null) {
-          return serviceIdsBuilder_.getMessageOrBuilderList();
+      @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.LinkId) {
+          return mergeFrom((context.ContextOuterClass.LinkId)other);
         } else {
-          return java.util.Collections.unmodifiableList(serviceIds_);
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
-        return getServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+
+      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
+        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
+        if (other.hasLinkUuid()) {
+          mergeLinkUuid(other.getLinkUuid());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      /**
-       * <code>repeated .context.ServiceId service_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceIdsBuilderList() {
-        return getServiceIdsFieldBuilder().getBuilderList();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdsFieldBuilder() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceIds_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceIds_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.LinkId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return serviceIdsBuilder_;
+        return this;
       }
 
-      private context.ContextOuterClass.TeraFlowController controller_;
+      private context.ContextOuterClass.Uuid linkUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> controllerBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       * @return Whether the controller field is set.
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return Whether the linkUuid field is set.
        */
-      public boolean hasController() {
-        return controllerBuilder_ != null || controller_ != null;
+      public boolean hasLinkUuid() {
+        return linkUuidBuilder_ != null || linkUuid_ != null;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
-       * @return The controller.
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return The linkUuid.
        */
-      public context.ContextOuterClass.TeraFlowController getController() {
-        if (controllerBuilder_ == null) {
-          return controller_ == null ? context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+      public context.ContextOuterClass.Uuid getLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
         } else {
-          return controllerBuilder_.getMessage();
+          return linkUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder setController(context.ContextOuterClass.TeraFlowController value) {
-        if (controllerBuilder_ == null) {
+      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          controller_ = value;
+          linkUuid_ = value;
           onChanged();
         } else {
-          controllerBuilder_.setMessage(value);
+          linkUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder setController(
-          context.ContextOuterClass.TeraFlowController.Builder builderForValue) {
-        if (controllerBuilder_ == null) {
-          controller_ = builderForValue.build();
+      public Builder setLinkUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = builderForValue.build();
           onChanged();
         } else {
-          controllerBuilder_.setMessage(builderForValue.build());
+          linkUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder mergeController(context.ContextOuterClass.TeraFlowController value) {
-        if (controllerBuilder_ == null) {
-          if (controller_ != null) {
-            controller_ =
-              context.ContextOuterClass.TeraFlowController.newBuilder(controller_).mergeFrom(value).buildPartial();
+      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (linkUuid_ != null) {
+            linkUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
           } else {
-            controller_ = value;
+            linkUuid_ = value;
           }
           onChanged();
         } else {
-          controllerBuilder_.mergeFrom(value);
+          linkUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public Builder clearController() {
-        if (controllerBuilder_ == null) {
-          controller_ = null;
+      public Builder clearLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
           onChanged();
         } else {
-          controller_ = null;
-          controllerBuilder_ = null;
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public context.ContextOuterClass.TeraFlowController.Builder getControllerBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
         
         onChanged();
-        return getControllerFieldBuilder().getBuilder();
+        return getLinkUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
-      public context.ContextOuterClass.TeraFlowControllerOrBuilder getControllerOrBuilder() {
-        if (controllerBuilder_ != null) {
-          return controllerBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+        if (linkUuidBuilder_ != null) {
+          return linkUuidBuilder_.getMessageOrBuilder();
         } else {
-          return controller_ == null ?
-              context.ContextOuterClass.TeraFlowController.getDefaultInstance() : controller_;
+          return linkUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
         }
       }
       /**
-       * <code>.context.TeraFlowController controller = 4;</code>
+       * <code>.context.Uuid link_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder> 
-          getControllerFieldBuilder() {
-        if (controllerBuilder_ == null) {
-          controllerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.TeraFlowController, context.ContextOuterClass.TeraFlowController.Builder, context.ContextOuterClass.TeraFlowControllerOrBuilder>(
-                  getController(),
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getLinkUuidFieldBuilder() {
+        if (linkUuidBuilder_ == null) {
+          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getLinkUuid(),
                   getParentForChildren(),
                   isClean());
-          controller_ = null;
+          linkUuid_ = null;
         }
-        return controllerBuilder_;
+        return linkUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -4668,95 +18711,110 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Context)
+      // @@protoc_insertion_point(builder_scope:context.LinkId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Context)
-    private static final context.ContextOuterClass.Context DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkId)
+    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Context();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
     }
 
-    public static context.ContextOuterClass.Context getDefaultInstance() {
+    public static context.ContextOuterClass.LinkId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Context>
-        PARSER = new com.google.protobuf.AbstractParser<Context>() {
+    private static final com.google.protobuf.Parser<LinkId>
+        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
       @java.lang.Override
-      public Context parsePartialFrom(
+      public LinkId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Context(input, extensionRegistry);
+        return new LinkId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Context> parser() {
+    public static com.google.protobuf.Parser<LinkId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Context> getParserForType() {
+    public com.google.protobuf.Parser<LinkId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Context getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextIdList)
+  public interface LinkOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Link)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
      */
-    java.util.List<context.ContextOuterClass.ContextId> 
-        getContextIdsList();
+    boolean hasLinkId();
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
      */
-    context.ContextOuterClass.ContextId getContextIds(int index);
+    context.ContextOuterClass.LinkId getLinkId();
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
      */
-    int getContextIdsCount();
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
-        getContextIdsOrBuilderList();
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getLinkEndpointIdsList();
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    int getLinkEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ContextIdList}
+   * Protobuf type {@code context.Link}
    */
-  public static final class ContextIdList extends
+  public static final class Link extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextIdList)
-      ContextIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Link)
+      LinkOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextIdList.newBuilder() to construct.
-    private ContextIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Link.newBuilder() to construct.
+    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextIdList() {
-      contextIds_ = java.util.Collections.emptyList();
+    private Link() {
+      linkEndpointIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextIdList();
+      return new Link();
     }
 
     @java.lang.Override
@@ -4764,7 +18822,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextIdList(
+    private Link(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4784,12 +18842,25 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
+              }
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>();
+                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              contextIds_.add(
-                  input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry));
+              linkEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -4808,7 +18879,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -4816,55 +18887,81 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Link_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
     }
 
-    public static final int CONTEXT_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ContextId> contextIds_;
+    public static final int LINK_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.LinkId linkId_;
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return Whether the linkId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
-      return contextIds_;
+    public boolean hasLinkId() {
+      return linkId_ != null;
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
+     * @return The linkId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
-        getContextIdsOrBuilderList() {
-      return contextIds_;
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>.context.LinkId link_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
+    }
+
+    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getLinkEndpointIdsOrBuilderList() {
+      return linkEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public int getContextIdsCount() {
-      return contextIds_.size();
+    public int getLinkEndpointIdsCount() {
+      return linkEndpointIds_.size();
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextIds(int index) {
-      return contextIds_.get(index);
+    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+      return linkEndpointIds_.get(index);
     }
     /**
-     * <code>repeated .context.ContextId context_ids = 1;</code>
+     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
         int index) {
-      return contextIds_.get(index);
+      return linkEndpointIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4881,8 +18978,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 < contextIds_.size(); i++) {
-        output.writeMessage(1, contextIds_.get(i));
+      if (linkId_ != null) {
+        output.writeMessage(1, getLinkId());
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        output.writeMessage(2, linkEndpointIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -4893,9 +18993,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < contextIds_.size(); i++) {
+      if (linkId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, contextIds_.get(i));
+          .computeMessageSize(1, getLinkId());
+      }
+      for (int i = 0; i < linkEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, linkEndpointIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4907,13 +19011,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.Link)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextIdList other = (context.ContextOuterClass.ContextIdList) obj;
+      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
 
-      if (!getContextIdsList()
-          .equals(other.getContextIdsList())) return false;
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
+      }
+      if (!getLinkEndpointIdsList()
+          .equals(other.getLinkEndpointIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4925,78 +19034,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getContextIdsCount() > 0) {
-        hash = (37 * hash) + CONTEXT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getContextIdsList().hashCode();
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
+      }
+      if (getLinkEndpointIdsCount() > 0) {
+        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link 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.ContextIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Link parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link 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.ContextIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Link parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.Link 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.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextIdList parseFrom(
+    public static context.ContextOuterClass.Link parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5009,7 +19122,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Link prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5025,26 +19138,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ContextIdList}
+     * Protobuf type {@code context.Link}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextIdList)
-        context.ContextOuterClass.ContextIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Link)
+        context.ContextOuterClass.LinkOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextIdList.class, context.ContextOuterClass.ContextIdList.Builder.class);
+                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextIdList.newBuilder()
+      // Construct using context.ContextOuterClass.Link.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5057,17 +19170,23 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getContextIdsFieldBuilder();
+          getLinkEndpointIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdsBuilder_ == null) {
-          contextIds_ = java.util.Collections.emptyList();
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          contextIdsBuilder_.clear();
+          linkEndpointIdsBuilder_.clear();
         }
         return this;
       }
@@ -5075,17 +19194,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Link_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextIdList.getDefaultInstance();
+      public context.ContextOuterClass.Link getDefaultInstanceForType() {
+        return context.ContextOuterClass.Link.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextIdList build() {
-        context.ContextOuterClass.ContextIdList result = buildPartial();
+      public context.ContextOuterClass.Link build() {
+        context.ContextOuterClass.Link result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5093,17 +19212,22 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextIdList buildPartial() {
-        context.ContextOuterClass.ContextIdList result = new context.ContextOuterClass.ContextIdList(this);
+      public context.ContextOuterClass.Link buildPartial() {
+        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
         int from_bitField0_ = bitField0_;
-        if (contextIdsBuilder_ == null) {
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
+        } else {
+          result.linkId_ = linkIdBuilder_.build();
+        }
+        if (linkEndpointIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            contextIds_ = java.util.Collections.unmodifiableList(contextIds_);
+            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.contextIds_ = contextIds_;
+          result.linkEndpointIds_ = linkEndpointIds_;
         } else {
-          result.contextIds_ = contextIdsBuilder_.build();
+          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -5143,39 +19267,42 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextIdList) {
-          return mergeFrom((context.ContextOuterClass.ContextIdList)other);
+        if (other instanceof context.ContextOuterClass.Link) {
+          return mergeFrom((context.ContextOuterClass.Link)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextIdList other) {
-        if (other == context.ContextOuterClass.ContextIdList.getDefaultInstance()) return this;
-        if (contextIdsBuilder_ == null) {
-          if (!other.contextIds_.isEmpty()) {
-            if (contextIds_.isEmpty()) {
-              contextIds_ = other.contextIds_;
+      public Builder mergeFrom(context.ContextOuterClass.Link other) {
+        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIds_.isEmpty()) {
+              linkEndpointIds_ = other.linkEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureContextIdsIsMutable();
-              contextIds_.addAll(other.contextIds_);
+              ensureLinkEndpointIdsIsMutable();
+              linkEndpointIds_.addAll(other.linkEndpointIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.contextIds_.isEmpty()) {
-            if (contextIdsBuilder_.isEmpty()) {
-              contextIdsBuilder_.dispose();
-              contextIdsBuilder_ = null;
-              contextIds_ = other.contextIds_;
+          if (!other.linkEndpointIds_.isEmpty()) {
+            if (linkEndpointIdsBuilder_.isEmpty()) {
+              linkEndpointIdsBuilder_.dispose();
+              linkEndpointIdsBuilder_ = null;
+              linkEndpointIds_ = other.linkEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              contextIdsBuilder_ = 
+              linkEndpointIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getContextIdsFieldBuilder() : null;
+                   getLinkEndpointIdsFieldBuilder() : null;
             } else {
-              contextIdsBuilder_.addAllMessages(other.contextIds_);
+              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
             }
           }
         }
@@ -5194,11 +19321,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextIdList parsedMessage = null;
+        context.ContextOuterClass.Link parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -5209,244 +19336,363 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ContextId> contextIds_ =
+      private context.ContextOuterClass.LinkId linkId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return Whether the linkId field is set.
+       */
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       * @return The linkId.
+       */
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        } else {
+          return linkIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkId_ = value;
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+          } else {
+            linkId_ = value;
+          }
+          onChanged();
+        } else {
+          linkIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+          onChanged();
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+        
+        onChanged();
+        return getLinkIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
+        } else {
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+        }
+      }
+      /**
+       * <code>.context.LinkId link_id = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
+                  getParentForChildren(),
+                  isClean());
+          linkId_ = null;
+        }
+        return linkIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
         java.util.Collections.emptyList();
-      private void ensureContextIdsIsMutable() {
+      private void ensureLinkEndpointIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          contextIds_ = new java.util.ArrayList<context.ContextOuterClass.ContextId>(contextIds_);
+          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdsBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
 
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ContextId> getContextIdsList() {
-        if (contextIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(contextIds_);
+      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
         } else {
-          return contextIdsBuilder_.getMessageList();
+          return linkEndpointIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public int getContextIdsCount() {
-        if (contextIdsBuilder_ == null) {
-          return contextIds_.size();
+      public int getLinkEndpointIdsCount() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.size();
         } else {
-          return contextIdsBuilder_.getCount();
+          return linkEndpointIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ContextId getContextIds(int index) {
-        if (contextIdsBuilder_ == null) {
-          return contextIds_.get(index);
+      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);
         } else {
-          return contextIdsBuilder_.getMessage(index);
+          return linkEndpointIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder setContextIds(
-          int index, context.ContextOuterClass.ContextId value) {
-        if (contextIdsBuilder_ == null) {
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextIdsIsMutable();
-          contextIds_.set(index, value);
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, value);
           onChanged();
         } else {
-          contextIdsBuilder_.setMessage(index, value);
+          linkEndpointIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder setContextIds(
-          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.set(index, builderForValue.build());
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdsBuilder_.setMessage(index, builderForValue.build());
+          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addContextIds(context.ContextOuterClass.ContextId value) {
-        if (contextIdsBuilder_ == null) {
+      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextIdsIsMutable();
-          contextIds_.add(value);
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(value);
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(value);
+          linkEndpointIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addContextIds(
-          int index, context.ContextOuterClass.ContextId value) {
-        if (contextIdsBuilder_ == null) {
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextIdsIsMutable();
-          contextIds_.add(index, value);
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, value);
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(index, value);
+          linkEndpointIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addContextIds(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.add(builderForValue.build());
+      public Builder addLinkEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(builderForValue.build());
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(builderForValue.build());
+          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addContextIds(
-          int index, context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.add(index, builderForValue.build());
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdsBuilder_.addMessage(index, builderForValue.build());
+          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder addAllContextIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ContextId> values) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
+      public Builder addAllLinkEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, contextIds_);
+              values, linkEndpointIds_);
           onChanged();
         } else {
-          contextIdsBuilder_.addAllMessages(values);
+          linkEndpointIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder clearContextIds() {
-        if (contextIdsBuilder_ == null) {
-          contextIds_ = java.util.Collections.emptyList();
+      public Builder clearLinkEndpointIds() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          contextIdsBuilder_.clear();
+          linkEndpointIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public Builder removeContextIds(int index) {
-        if (contextIdsBuilder_ == null) {
-          ensureContextIdsIsMutable();
-          contextIds_.remove(index);
+      public Builder removeLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.remove(index);
           onChanged();
         } else {
-          contextIdsBuilder_.remove(index);
+          linkEndpointIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdsBuilder(
+      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
           int index) {
-        return getContextIdsFieldBuilder().getBuilder(index);
+        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdsOrBuilder(
+      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
           int index) {
-        if (contextIdsBuilder_ == null) {
-          return contextIds_.get(index);  } else {
-          return contextIdsBuilder_.getMessageOrBuilder(index);
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);  } else {
+          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ContextIdOrBuilder> 
-           getContextIdsOrBuilderList() {
-        if (contextIdsBuilder_ != null) {
-          return contextIdsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getLinkEndpointIdsOrBuilderList() {
+        if (linkEndpointIdsBuilder_ != null) {
+          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(contextIds_);
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
         }
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder() {
-        return getContextIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ContextId.getDefaultInstance());
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder addContextIdsBuilder(
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
           int index) {
-        return getContextIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ContextId.getDefaultInstance());
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ContextId context_ids = 1;</code>
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.ContextId.Builder> 
-           getContextIdsBuilderList() {
-        return getContextIdsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getLinkEndpointIdsBuilderList() {
+        return getLinkEndpointIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdsFieldBuilder() {
-        if (contextIdsBuilder_ == null) {
-          contextIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  contextIds_,
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getLinkEndpointIdsFieldBuilder() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  linkEndpointIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          contextIds_ = null;
+          linkEndpointIds_ = null;
         }
-        return contextIdsBuilder_;
+        return linkEndpointIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -5461,95 +19707,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextIdList)
+      // @@protoc_insertion_point(builder_scope:context.Link)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextIdList)
-    private static final context.ContextOuterClass.ContextIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Link)
+    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
     }
 
-    public static context.ContextOuterClass.ContextIdList getDefaultInstance() {
+    public static context.ContextOuterClass.Link getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ContextIdList>() {
+    private static final com.google.protobuf.Parser<Link>
+        PARSER = new com.google.protobuf.AbstractParser<Link>() {
       @java.lang.Override
-      public ContextIdList parsePartialFrom(
+      public Link parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextIdList(input, extensionRegistry);
+        return new Link(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextIdList> parser() {
+    public static com.google.protobuf.Parser<Link> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextIdList> getParserForType() {
+    public com.google.protobuf.Parser<Link> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Link getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextList)
+  public interface LinkIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.Context> 
-        getContextsList();
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    context.ContextOuterClass.Context getContexts(int index);
+    context.ContextOuterClass.LinkId getLinkIds(int index);
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    int getContextsCount();
+    int getLinkIdsCount();
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
-        getContextsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
-    context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.ContextList}
+   * Protobuf type {@code context.LinkIdList}
    */
-  public static final class ContextList extends
+  public static final class LinkIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextList)
-      ContextListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkIdList)
+      LinkIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextList.newBuilder() to construct.
-    private ContextList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkIdList.newBuilder() to construct.
+    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextList() {
-      contexts_ = java.util.Collections.emptyList();
+    private LinkIdList() {
+      linkIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextList();
+      return new LinkIdList();
     }
 
     @java.lang.Override
@@ -5557,7 +19803,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextList(
+    private LinkIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -5578,11 +19824,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>();
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              contexts_.add(
-                  input.readMessage(context.ContextOuterClass.Context.parser(), extensionRegistry));
+              linkIds_.add(
+                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -5601,7 +19847,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          contexts_ = java.util.Collections.unmodifiableList(contexts_);
+          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -5609,55 +19855,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
     }
 
-    public static final int CONTEXTS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Context> contexts_;
+    public static final int LINK_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Context> getContextsList() {
-      return contexts_;
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
-        getContextsOrBuilderList() {
-      return contexts_;
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public int getContextsCount() {
-      return contexts_.size();
+    public int getLinkIdsCount() {
+      return linkIds_.size();
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Context getContexts(int index) {
-      return contexts_.get(index);
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
     }
     /**
-     * <code>repeated .context.Context contexts = 1;</code>
+     * <code>repeated .context.LinkId link_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
         int index) {
-      return contexts_.get(index);
+      return linkIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -5674,8 +19920,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 < contexts_.size(); i++) {
-        output.writeMessage(1, contexts_.get(i));
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(1, linkIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -5686,9 +19932,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < contexts_.size(); i++) {
+      for (int i = 0; i < linkIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, contexts_.get(i));
+          .computeMessageSize(1, linkIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -5700,13 +19946,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextList)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextList other = (context.ContextOuterClass.ContextList) obj;
+      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
 
-      if (!getContextsList()
-          .equals(other.getContextsList())) return false;
+      if (!getLinkIdsList()
+          .equals(other.getLinkIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -5718,78 +19964,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getContextsCount() > 0) {
-        hash = (37 * hash) + CONTEXTS_FIELD_NUMBER;
-        hash = (53 * hash) + getContextsList().hashCode();
+      if (getLinkIdsCount() > 0) {
+        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList 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.ContextList parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList 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.ContextList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextList parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkIdList 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.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextList parseFrom(
+    public static context.ContextOuterClass.LinkIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5802,7 +20048,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5818,26 +20064,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ContextList}
+     * Protobuf type {@code context.LinkIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextList)
-        context.ContextOuterClass.ContextListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
+        context.ContextOuterClass.LinkIdListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextList.class, context.ContextOuterClass.ContextList.Builder.class);
+                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextList.newBuilder()
+      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5850,17 +20096,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getContextsFieldBuilder();
+          getLinkIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextsBuilder_ == null) {
-          contexts_ = java.util.Collections.emptyList();
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          contextsBuilder_.clear();
+          linkIdsBuilder_.clear();
         }
         return this;
       }
@@ -5868,17 +20114,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextList_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextList.getDefaultInstance();
+      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextList build() {
-        context.ContextOuterClass.ContextList result = buildPartial();
+      public context.ContextOuterClass.LinkIdList build() {
+        context.ContextOuterClass.LinkIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5886,17 +20132,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextList buildPartial() {
-        context.ContextOuterClass.ContextList result = new context.ContextOuterClass.ContextList(this);
+      public context.ContextOuterClass.LinkIdList buildPartial() {
+        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
         int from_bitField0_ = bitField0_;
-        if (contextsBuilder_ == null) {
+        if (linkIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            contexts_ = java.util.Collections.unmodifiableList(contexts_);
+            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.contexts_ = contexts_;
+          result.linkIds_ = linkIds_;
         } else {
-          result.contexts_ = contextsBuilder_.build();
+          result.linkIds_ = linkIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -5936,39 +20182,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextList) {
-          return mergeFrom((context.ContextOuterClass.ContextList)other);
+        if (other instanceof context.ContextOuterClass.LinkIdList) {
+          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextList other) {
-        if (other == context.ContextOuterClass.ContextList.getDefaultInstance()) return this;
-        if (contextsBuilder_ == null) {
-          if (!other.contexts_.isEmpty()) {
-            if (contexts_.isEmpty()) {
-              contexts_ = other.contexts_;
+      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
+        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
+        if (linkIdsBuilder_ == null) {
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIds_.isEmpty()) {
+              linkIds_ = other.linkIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureContextsIsMutable();
-              contexts_.addAll(other.contexts_);
+              ensureLinkIdsIsMutable();
+              linkIds_.addAll(other.linkIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.contexts_.isEmpty()) {
-            if (contextsBuilder_.isEmpty()) {
-              contextsBuilder_.dispose();
-              contextsBuilder_ = null;
-              contexts_ = other.contexts_;
+          if (!other.linkIds_.isEmpty()) {
+            if (linkIdsBuilder_.isEmpty()) {
+              linkIdsBuilder_.dispose();
+              linkIdsBuilder_ = null;
+              linkIds_ = other.linkIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              contextsBuilder_ = 
+              linkIdsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getContextsFieldBuilder() : null;
+                   getLinkIdsFieldBuilder() : null;
             } else {
-              contextsBuilder_.addAllMessages(other.contexts_);
+              linkIdsBuilder_.addAllMessages(other.linkIds_);
             }
           }
         }
@@ -5987,11 +20233,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextList parsedMessage = null;
+        context.ContextOuterClass.LinkIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -6002,244 +20248,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Context> contexts_ =
+      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
         java.util.Collections.emptyList();
-      private void ensureContextsIsMutable() {
+      private void ensureLinkIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          contexts_ = new java.util.ArrayList<context.ContextOuterClass.Context>(contexts_);
+          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> contextsBuilder_;
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
 
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Context> getContextsList() {
-        if (contextsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(contexts_);
+      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+        if (linkIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkIds_);
         } else {
-          return contextsBuilder_.getMessageList();
+          return linkIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public int getContextsCount() {
-        if (contextsBuilder_ == null) {
-          return contexts_.size();
+      public int getLinkIdsCount() {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.size();
         } else {
-          return contextsBuilder_.getCount();
+          return linkIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.Context getContexts(int index) {
-        if (contextsBuilder_ == null) {
-          return contexts_.get(index);
+      public context.ContextOuterClass.LinkId getLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);
         } else {
-          return contextsBuilder_.getMessage(index);
+          return linkIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder setContexts(
-          int index, context.ContextOuterClass.Context value) {
-        if (contextsBuilder_ == null) {
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextsIsMutable();
-          contexts_.set(index, value);
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, value);
           onChanged();
         } else {
-          contextsBuilder_.setMessage(index, value);
+          linkIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder setContexts(
-          int index, context.ContextOuterClass.Context.Builder builderForValue) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.set(index, builderForValue.build());
+      public Builder setLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          contextsBuilder_.setMessage(index, builderForValue.build());
+          linkIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContexts(context.ContextOuterClass.Context value) {
-        if (contextsBuilder_ == null) {
+      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextsIsMutable();
-          contexts_.add(value);
+          ensureLinkIdsIsMutable();
+          linkIds_.add(value);
           onChanged();
         } else {
-          contextsBuilder_.addMessage(value);
+          linkIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContexts(
-          int index, context.ContextOuterClass.Context value) {
-        if (contextsBuilder_ == null) {
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId value) {
+        if (linkIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureContextsIsMutable();
-          contexts_.add(index, value);
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, value);
           onChanged();
         } else {
-          contextsBuilder_.addMessage(index, value);
+          linkIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContexts(
-          context.ContextOuterClass.Context.Builder builderForValue) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.add(builderForValue.build());
+      public Builder addLinkIds(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(builderForValue.build());
           onChanged();
         } else {
-          contextsBuilder_.addMessage(builderForValue.build());
+          linkIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addContexts(
-          int index, context.ContextOuterClass.Context.Builder builderForValue) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.add(index, builderForValue.build());
+      public Builder addLinkIds(
+          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          contextsBuilder_.addMessage(index, builderForValue.build());
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder addAllContexts(
-          java.lang.Iterable<? extends context.ContextOuterClass.Context> values) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
+      public Builder addAllLinkIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, contexts_);
+              values, linkIds_);
           onChanged();
         } else {
-          contextsBuilder_.addAllMessages(values);
+          linkIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder clearContexts() {
-        if (contextsBuilder_ == null) {
-          contexts_ = java.util.Collections.emptyList();
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          contextsBuilder_.clear();
+          linkIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public Builder removeContexts(int index) {
-        if (contextsBuilder_ == null) {
-          ensureContextsIsMutable();
-          contexts_.remove(index);
+      public Builder removeLinkIds(int index) {
+        if (linkIdsBuilder_ == null) {
+          ensureLinkIdsIsMutable();
+          linkIds_.remove(index);
           onChanged();
         } else {
-          contextsBuilder_.remove(index);
+          linkIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.Context.Builder getContextsBuilder(
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
           int index) {
-        return getContextsFieldBuilder().getBuilder(index);
+        return getLinkIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.ContextOrBuilder getContextsOrBuilder(
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
           int index) {
-        if (contextsBuilder_ == null) {
-          return contexts_.get(index);  } else {
-          return contextsBuilder_.getMessageOrBuilder(index);
+        if (linkIdsBuilder_ == null) {
+          return linkIds_.get(index);  } else {
+          return linkIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ContextOrBuilder> 
-           getContextsOrBuilderList() {
-        if (contextsBuilder_ != null) {
-          return contextsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+           getLinkIdsOrBuilderList() {
+        if (linkIdsBuilder_ != null) {
+          return linkIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(contexts_);
+          return java.util.Collections.unmodifiableList(linkIds_);
         }
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.Context.Builder addContextsBuilder() {
-        return getContextsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Context.getDefaultInstance());
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public context.ContextOuterClass.Context.Builder addContextsBuilder(
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
           int index) {
-        return getContextsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Context.getDefaultInstance());
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Context contexts = 1;</code>
+       * <code>repeated .context.LinkId link_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Context.Builder> 
-           getContextsBuilderList() {
-        return getContextsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
+           getLinkIdsBuilderList() {
+        return getLinkIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder> 
-          getContextsFieldBuilder() {
-        if (contextsBuilder_ == null) {
-          contextsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Context, context.ContextOuterClass.Context.Builder, context.ContextOuterClass.ContextOrBuilder>(
-                  contexts_,
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdsFieldBuilder() {
+        if (linkIdsBuilder_ == null) {
+          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  linkIds_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          contexts_ = null;
+          linkIds_ = null;
         }
-        return contextsBuilder_;
+        return linkIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -6254,100 +20500,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextList)
+      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextList)
-    private static final context.ContextOuterClass.ContextList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkIdList)
+    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
     }
 
-    public static context.ContextOuterClass.ContextList getDefaultInstance() {
+    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextList>
-        PARSER = new com.google.protobuf.AbstractParser<ContextList>() {
+    private static final com.google.protobuf.Parser<LinkIdList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
       @java.lang.Override
-      public ContextList parsePartialFrom(
+      public LinkIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextList(input, extensionRegistry);
+        return new LinkIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextList> parser() {
+    public static com.google.protobuf.Parser<LinkIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextList> getParserForType() {
+    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextList getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ContextEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ContextEvent)
+  public interface LinkListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Link links = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    java.util.List<context.ContextOuterClass.Link> 
+        getLinksList();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    context.ContextOuterClass.Link getLinks(int index);
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return Whether the contextId field is set.
+     * <code>repeated .context.Link links = 1;</code>
      */
-    boolean hasContextId();
+    int getLinksCount();
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return The contextId.
+     * <code>repeated .context.Link links = 1;</code>
      */
-    context.ContextOuterClass.ContextId getContextId();
+    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList();
     /**
-     * <code>.context.ContextId context_id = 2;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.ContextEvent}
+   * Protobuf type {@code context.LinkList}
    */
-  public static final class ContextEvent extends
+  public static final class LinkList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ContextEvent)
-      ContextEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkList)
+      LinkListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ContextEvent.newBuilder() to construct.
-    private ContextEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkList.newBuilder() to construct.
+    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ContextEvent() {
+    private LinkList() {
+      links_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ContextEvent();
+      return new LinkList();
     }
 
     @java.lang.Override
@@ -6355,7 +20596,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ContextEvent(
+    private LinkList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -6363,6 +20604,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 {
@@ -6374,29 +20616,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.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -6414,73 +20639,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          links_ = java.util.Collections.unmodifiableList(links_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.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 LINKS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Link> links_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+      return links_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList() {
+      return links_;
     }
-
-    public static final int CONTEXT_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ContextId contextId_;
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return Whether the contextId field is set.
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public int getLinksCount() {
+      return links_.size();
     }
     /**
-     * <code>.context.ContextId context_id = 2;</code>
-     * @return The contextId.
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.Link getLinks(int index) {
+      return links_.get(index);
     }
     /**
-     * <code>.context.ContextId context_id = 2;</code>
+     * <code>repeated .context.Link links = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index) {
+      return links_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -6497,11 +20713,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 (contextId_ != null) {
-        output.writeMessage(2, getContextId());
+      for (int i = 0; i < links_.size(); i++) {
+        output.writeMessage(1, links_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -6512,13 +20725,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (contextId_ != null) {
+      for (int i = 0; i < links_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getContextId());
+          .computeMessageSize(1, links_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -6530,21 +20739,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ContextEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ContextEvent other = (context.ContextOuterClass.ContextEvent) obj;
+      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
+      if (!getLinksList()
+          .equals(other.getLinksList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -6556,82 +20757,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 (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
+      if (getLinksCount() > 0) {
+        hash = (37 * hash) + LINKS_FIELD_NUMBER;
+        hash = (53 * hash) + getLinksList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList 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.ContextEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList 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.ContextEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkList 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.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.ContextEvent parseFrom(
+    public static context.ContextOuterClass.LinkList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -6644,7 +20841,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ContextEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -6660,26 +20857,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ContextEvent}
+     * Protobuf type {@code context.LinkList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ContextEvent)
-        context.ContextOuterClass.ContextEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkList)
+        context.ContextOuterClass.LinkListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_ContextEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ContextEvent.class, context.ContextOuterClass.ContextEvent.Builder.class);
+                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ContextEvent.newBuilder()
+      // Construct using context.ContextOuterClass.LinkList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -6692,22 +20889,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getLinksFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          linksBuilder_.clear();
         }
         return this;
       }
@@ -6715,17 +20907,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ContextEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ContextEvent.getDefaultInstance();
+      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextEvent build() {
-        context.ContextOuterClass.ContextEvent result = buildPartial();
+      public context.ContextOuterClass.LinkList build() {
+        context.ContextOuterClass.LinkList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -6733,17 +20925,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ContextEvent buildPartial() {
-        context.ContextOuterClass.ContextEvent result = new context.ContextOuterClass.ContextEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
+      public context.ContextOuterClass.LinkList buildPartial() {
+        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
+        int from_bitField0_ = bitField0_;
+        if (linksBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            links_ = java.util.Collections.unmodifiableList(links_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.links_ = links_;
         } else {
-          result.contextId_ = contextIdBuilder_.build();
+          result.links_ = linksBuilder_.build();
         }
         onBuilt();
         return result;
@@ -6783,21 +20975,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ContextEvent) {
-          return mergeFrom((context.ContextOuterClass.ContextEvent)other);
+        if (other instanceof context.ContextOuterClass.LinkList) {
+          return mergeFrom((context.ContextOuterClass.LinkList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ContextEvent other) {
-        if (other == context.ContextOuterClass.ContextEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
+      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
+        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
+        if (linksBuilder_ == null) {
+          if (!other.links_.isEmpty()) {
+            if (links_.isEmpty()) {
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureLinksIsMutable();
+              links_.addAll(other.links_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.links_.isEmpty()) {
+            if (linksBuilder_.isEmpty()) {
+              linksBuilder_.dispose();
+              linksBuilder_ = null;
+              links_ = other.links_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              linksBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getLinksFieldBuilder() : null;
+            } else {
+              linksBuilder_.addAllMessages(other.links_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -6814,11 +21026,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ContextEvent parsedMessage = null;
+        context.ContextOuterClass.LinkList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ContextEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -6827,243 +21039,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      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.
-       */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      private java.util.List<context.ContextOuterClass.Link> links_ =
+        java.util.Collections.emptyList();
+      private void ensureLinksIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
+          bitField0_ |= 0x00000001;
+         }
       }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
+
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
+        if (linksBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(links_);
         } else {
-          return eventBuilder_.getMessage();
+          return linksBuilder_.getMessageList();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          event_ = value;
-          onChanged();
+      public int getLinksCount() {
+        if (linksBuilder_ == null) {
+          return links_.size();
         } else {
-          eventBuilder_.setMessage(value);
+          return linksBuilder_.getCount();
         }
-
-        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
-          onChanged();
+      public context.ContextOuterClass.Link getLinks(int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          return linksBuilder_.getMessage(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Link links = 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 setLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureLinksIsMutable();
+          links_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          linksBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder setLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.set(index, builderForValue.build());
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          linksBuilder_.setMessage(index, builderForValue.build());
         }
-
         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.Link links = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addLinks(context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(value);
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          linksBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.Link links = 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 addLinks(
+          int index, context.ContextOuterClass.Link value) {
+        if (linksBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinksIsMutable();
+          links_.add(index, value);
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(index, value);
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.ContextId contextId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
-      /**
-       * <code>.context.ContextId context_id = 2;</code>
-       * @return Whether the contextId field is set.
-       */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+        return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
-       * @return The contextId.
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public Builder addLinks(
+          context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
+          onChanged();
         } else {
-          return contextIdBuilder_.getMessage();
+          linksBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          contextId_ = value;
+      public Builder addLinks(
+          int index, context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          linksBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder addAllLinks(
+          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, links_);
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          linksBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
-          } else {
-            contextId_ = value;
-          }
+      public Builder clearLinks() {
+        if (linksBuilder_ == null) {
+          links_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          linksBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          linksBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
-        
-        onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Link.Builder getLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+          int index) {
+        if (linksBuilder_ == null) {
+          return links_.get(index);  } else {
+          return linksBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+           getLinksOrBuilderList() {
+        if (linksBuilder_ != null) {
+          return linksBuilder_.getMessageOrBuilderList();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return java.util.Collections.unmodifiableList(links_);
         }
       }
       /**
-       * <code>.context.ContextId context_id = 2;</code>
+       * <code>repeated .context.Link links = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
+        return getLinksFieldBuilder().addBuilder(
+            context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder addLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Link.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Link.Builder> 
+           getLinksBuilderList() {
+        return getLinksFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
+          getLinksFieldBuilder() {
+        if (linksBuilder_ == null) {
+          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
+                  links_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          contextId_ = null;
+          links_ = null;
         }
-        return contextIdBuilder_;
+        return linksBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7078,104 +21293,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ContextEvent)
+      // @@protoc_insertion_point(builder_scope:context.LinkList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ContextEvent)
-    private static final context.ContextOuterClass.ContextEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkList)
+    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ContextEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
     }
 
-    public static context.ContextOuterClass.ContextEvent getDefaultInstance() {
+    public static context.ContextOuterClass.LinkList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ContextEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ContextEvent>() {
+    private static final com.google.protobuf.Parser<LinkList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
       @java.lang.Override
-      public ContextEvent parsePartialFrom(
+      public LinkList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ContextEvent(input, extensionRegistry);
+        return new LinkList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ContextEvent> parser() {
+    public static com.google.protobuf.Parser<LinkList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ContextEvent> getParserForType() {
+    public com.google.protobuf.Parser<LinkList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ContextEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyId)
+  public interface LinkEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasContextId();
+    boolean hasEvent();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.ContextId getContextId();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return Whether the topologyUuid field is set.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
      */
-    boolean hasTopologyUuid();
+    boolean hasLinkId();
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return The topologyUuid.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
      */
-    context.ContextOuterClass.Uuid getTopologyUuid();
+    context.ContextOuterClass.LinkId getLinkId();
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
+     * <code>.context.LinkId link_id = 2;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder();
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
   }
   /**
-   * <pre>
-   * ----- Topology ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.TopologyId}
+   * Protobuf type {@code context.LinkEvent}
    */
-  public static final class TopologyId extends
+  public static final class LinkEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyId)
-      TopologyIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.LinkEvent)
+      LinkEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyId.newBuilder() to construct.
-    private TopologyId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use LinkEvent.newBuilder() to construct.
+    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyId() {
+    private LinkEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyId();
+      return new LinkEvent();
     }
 
     @java.lang.Override
@@ -7183,7 +21394,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyId(
+    private LinkEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -7202,27 +21413,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (topologyUuid_ != null) {
-                subBuilder = topologyUuid_.toBuilder();
+              context.ContextOuterClass.LinkId.Builder subBuilder = null;
+              if (linkId_ != null) {
+                subBuilder = linkId_.toBuilder();
               }
-              topologyUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyUuid_);
-                topologyUuid_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(linkId_);
+                linkId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -7248,67 +21459,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+      return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
 
-    public static final int TOPOLOGY_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid topologyUuid_;
+    public static final int LINK_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.LinkId linkId_;
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return Whether the topologyUuid field is set.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
      */
     @java.lang.Override
-    public boolean hasTopologyUuid() {
-      return topologyUuid_ != null;
+    public boolean hasLinkId() {
+      return linkId_ != null;
     }
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
-     * @return The topologyUuid.
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getTopologyUuid() {
-      return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+    public context.ContextOuterClass.LinkId getLinkId() {
+      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
     }
     /**
-     * <code>.context.Uuid topology_uuid = 2;</code>
+     * <code>.context.LinkId link_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
-      return getTopologyUuid();
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -7325,11 +21536,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
-      if (topologyUuid_ != null) {
-        output.writeMessage(2, getTopologyUuid());
+      if (linkId_ != null) {
+        output.writeMessage(2, getLinkId());
       }
       unknownFields.writeTo(output);
     }
@@ -7340,13 +21551,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
+          .computeMessageSize(1, getEvent());
       }
-      if (topologyUuid_ != null) {
+      if (linkId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTopologyUuid());
+          .computeMessageSize(2, getLinkId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -7358,20 +21569,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyId)) {
+      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyId other = (context.ContextOuterClass.TopologyId) obj;
+      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
-      if (hasTopologyUuid() != other.hasTopologyUuid()) return false;
-      if (hasTopologyUuid()) {
-        if (!getTopologyUuid()
-            .equals(other.getTopologyUuid())) return false;
+      if (hasLinkId() != other.hasLinkId()) return false;
+      if (hasLinkId()) {
+        if (!getLinkId()
+            .equals(other.getLinkId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -7384,82 +21595,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
-      if (hasTopologyUuid()) {
-        hash = (37 * hash) + TOPOLOGY_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyUuid().hashCode();
+      if (hasLinkId()) {
+        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getLinkId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent 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.TopologyId parseFrom(byte[] data)
+    public static context.ContextOuterClass.LinkEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent 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.TopologyId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.LinkEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyId parseDelimitedFrom(
+    public static context.ContextOuterClass.LinkEvent 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.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyId parseFrom(
+    public static context.ContextOuterClass.LinkEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -7472,7 +21683,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -7488,30 +21699,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Topology ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.TopologyId}
+     * Protobuf type {@code context.LinkEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyId)
-        context.ContextOuterClass.TopologyIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
+        context.ContextOuterClass.LinkEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyId.class, context.ContextOuterClass.TopologyId.Builder.class);
+                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyId.newBuilder()
+      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -7529,17 +21736,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
-        if (topologyUuidBuilder_ == null) {
-          topologyUuid_ = null;
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
         } else {
-          topologyUuid_ = null;
-          topologyUuidBuilder_ = null;
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
         return this;
       }
@@ -7547,17 +21754,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyId_descriptor;
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyId.getDefaultInstance();
+      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyId build() {
-        context.ContextOuterClass.TopologyId result = buildPartial();
+      public context.ContextOuterClass.LinkEvent build() {
+        context.ContextOuterClass.LinkEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -7565,17 +21772,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyId buildPartial() {
-        context.ContextOuterClass.TopologyId result = new context.ContextOuterClass.TopologyId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
+      public context.ContextOuterClass.LinkEvent buildPartial() {
+        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.contextId_ = contextIdBuilder_.build();
+          result.event_ = eventBuilder_.build();
         }
-        if (topologyUuidBuilder_ == null) {
-          result.topologyUuid_ = topologyUuid_;
+        if (linkIdBuilder_ == null) {
+          result.linkId_ = linkId_;
         } else {
-          result.topologyUuid_ = topologyUuidBuilder_.build();
+          result.linkId_ = linkIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -7615,21 +21822,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyId) {
-          return mergeFrom((context.ContextOuterClass.TopologyId)other);
+        if (other instanceof context.ContextOuterClass.LinkEvent) {
+          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyId other) {
-        if (other == context.ContextOuterClass.TopologyId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
+      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
+        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
-        if (other.hasTopologyUuid()) {
-          mergeTopologyUuid(other.getTopologyUuid());
+        if (other.hasLinkId()) {
+          mergeLinkId(other.getLinkId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -7646,11 +21853,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyId parsedMessage = null;
+        context.ContextOuterClass.LinkEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -7660,242 +21867,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.ContextId contextId_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return contextIdBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          event_ = value;
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).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 {
-            contextId_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
         onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+          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());
-          contextId_ = null;
+          event_ = null;
         }
-        return contextIdBuilder_;
+        return eventBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid topologyUuid_;
+      private context.ContextOuterClass.LinkId linkId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> topologyUuidBuilder_;
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
-       * @return Whether the topologyUuid field is set.
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return Whether the linkId field is set.
        */
-      public boolean hasTopologyUuid() {
-        return topologyUuidBuilder_ != null || topologyUuid_ != null;
+      public boolean hasLinkId() {
+        return linkIdBuilder_ != null || linkId_ != null;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
-       * @return The topologyUuid.
+       * <code>.context.LinkId link_id = 2;</code>
+       * @return The linkId.
        */
-      public context.ContextOuterClass.Uuid getTopologyUuid() {
-        if (topologyUuidBuilder_ == null) {
-          return topologyUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+      public context.ContextOuterClass.LinkId getLinkId() {
+        if (linkIdBuilder_ == null) {
+          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         } else {
-          return topologyUuidBuilder_.getMessage();
+          return linkIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder setTopologyUuid(context.ContextOuterClass.Uuid value) {
-        if (topologyUuidBuilder_ == null) {
+      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          topologyUuid_ = value;
+          linkId_ = value;
           onChanged();
         } else {
-          topologyUuidBuilder_.setMessage(value);
+          linkIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder setTopologyUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (topologyUuidBuilder_ == null) {
-          topologyUuid_ = builderForValue.build();
+      public Builder setLinkId(
+          context.ContextOuterClass.LinkId.Builder builderForValue) {
+        if (linkIdBuilder_ == null) {
+          linkId_ = builderForValue.build();
           onChanged();
         } else {
-          topologyUuidBuilder_.setMessage(builderForValue.build());
+          linkIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder mergeTopologyUuid(context.ContextOuterClass.Uuid value) {
-        if (topologyUuidBuilder_ == null) {
-          if (topologyUuid_ != null) {
-            topologyUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(topologyUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
+        if (linkIdBuilder_ == null) {
+          if (linkId_ != null) {
+            linkId_ =
+              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
           } else {
-            topologyUuid_ = value;
+            linkId_ = value;
           }
           onChanged();
         } else {
-          topologyUuidBuilder_.mergeFrom(value);
+          linkIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public Builder clearTopologyUuid() {
-        if (topologyUuidBuilder_ == null) {
-          topologyUuid_ = null;
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
           onChanged();
         } else {
-          topologyUuid_ = null;
-          topologyUuidBuilder_ = null;
+          linkId_ = null;
+          linkIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getTopologyUuidBuilder() {
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
         
         onChanged();
-        return getTopologyUuidFieldBuilder().getBuilder();
+        return getLinkIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getTopologyUuidOrBuilder() {
-        if (topologyUuidBuilder_ != null) {
-          return topologyUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+        if (linkIdBuilder_ != null) {
+          return linkIdBuilder_.getMessageOrBuilder();
         } else {
-          return topologyUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : topologyUuid_;
+          return linkId_ == null ?
+              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
         }
       }
       /**
-       * <code>.context.Uuid topology_uuid = 2;</code>
+       * <code>.context.LinkId link_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getTopologyUuidFieldBuilder() {
-        if (topologyUuidBuilder_ == null) {
-          topologyUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getTopologyUuid(),
+          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
+          getLinkIdFieldBuilder() {
+        if (linkIdBuilder_ == null) {
+          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
+                  getLinkId(),
                   getParentForChildren(),
                   isClean());
-          topologyUuid_ = null;
+          linkId_ = null;
         }
-        return topologyUuidBuilder_;
+        return linkIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -7910,135 +22117,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyId)
+      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyId)
-    private static final context.ContextOuterClass.TopologyId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.LinkEvent)
+    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
     }
 
-    public static context.ContextOuterClass.TopologyId getDefaultInstance() {
+    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyId>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyId>() {
+    private static final com.google.protobuf.Parser<LinkEvent>
+        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
       @java.lang.Override
-      public TopologyId parsePartialFrom(
+      public LinkEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyId(input, extensionRegistry);
+        return new LinkEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyId> parser() {
+    public static com.google.protobuf.Parser<LinkEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyId> getParserForType() {
+    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getDefaultInstanceForType() {
+    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Topology)
+  public interface ServiceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    boolean hasTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    context.ContextOuterClass.TopologyId getTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
-
-    /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.DeviceId> 
-        getDeviceIdsList();
-    /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
-     */
-    context.ContextOuterClass.DeviceId getDeviceIds(int index);
-    /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
      */
-    int getDeviceIdsCount();
+    boolean hasContextId();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
      */
-    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList();
+    context.ContextOuterClass.ContextId getContextId();
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ContextId context_id = 1;</code>
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
 
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.LinkId> 
-        getLinkIdsList();
-    /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
-     */
-    context.ContextOuterClass.LinkId getLinkIds(int index);
-    /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
      */
-    int getLinkIdsCount();
+    boolean hasServiceUuid();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
      */
-    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList();
+    context.ContextOuterClass.Uuid getServiceUuid();
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Topology}
+   * <pre>
+   * ----- Service -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ServiceId}
    */
-  public static final class Topology extends
+  public static final class ServiceId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Topology)
-      TopologyOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceId)
+      ServiceIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Topology.newBuilder() to construct.
-    private Topology(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceId.newBuilder() to construct.
+    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Topology() {
-      deviceIds_ = java.util.Collections.emptyList();
-      linkIds_ = java.util.Collections.emptyList();
+    private ServiceId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Topology();
+      return new ServiceId();
     }
 
     @java.lang.Override
@@ -8046,7 +22222,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Topology(
+    private ServiceId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -8054,7 +22230,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 {
@@ -8066,34 +22241,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
               }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (serviceUuid_ != null) {
+                subBuilder = serviceUuid_.toBuilder();
               }
-              deviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
-                mutable_bitField0_ |= 0x00000002;
+              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceUuid_);
+                serviceUuid_ = subBuilder.buildPartial();
               }
-              linkIds_.add(
-                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+
               break;
             }
             default: {
@@ -8111,133 +22281,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
-    }
-
-    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.
-     */
-    @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
     }
 
-    public static final int DEVICE_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
-    /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-      return deviceIds_;
-    }
-    /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList() {
-      return deviceIds_;
-    }
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
      */
     @java.lang.Override
-    public int getDeviceIdsCount() {
-      return deviceIds_.size();
+    public boolean hasContextId() {
+      return contextId_ != null;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-      return deviceIds_.get(index);
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 2;</code>
+     * <code>.context.ContextId context_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index) {
-      return deviceIds_.get(index);
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
     }
 
-    public static final int LINK_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
-    /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-      return linkIds_;
-    }
-    /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList() {
-      return linkIds_;
-    }
+    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid serviceUuid_;
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
      */
     @java.lang.Override
-    public int getLinkIdsCount() {
-      return linkIds_.size();
+    public boolean hasServiceUuid() {
+      return serviceUuid_ != null;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkIds(int index) {
-      return linkIds_.get(index);
+    public context.ContextOuterClass.Uuid getServiceUuid() {
+      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 3;</code>
+     * <code>.context.Uuid service_uuid = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index) {
-      return linkIds_.get(index);
+    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+      return getServiceUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -8254,14 +22364,11 @@ 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());
-      }
-      for (int i = 0; i < deviceIds_.size(); i++) {
-        output.writeMessage(2, deviceIds_.get(i));
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
       }
-      for (int i = 0; i < linkIds_.size(); i++) {
-        output.writeMessage(3, linkIds_.get(i));
+      if (serviceUuid_ != null) {
+        output.writeMessage(2, getServiceUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -8272,17 +22379,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
-      }
-      for (int i = 0; i < deviceIds_.size(); i++) {
+      if (contextId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, deviceIds_.get(i));
+          .computeMessageSize(1, getContextId());
       }
-      for (int i = 0; i < linkIds_.size(); i++) {
+      if (serviceUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, linkIds_.get(i));
+          .computeMessageSize(2, getServiceUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -8294,20 +22397,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Topology)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Topology other = (context.ContextOuterClass.Topology) obj;
+      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
 
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasServiceUuid() != other.hasServiceUuid()) return false;
+      if (hasServiceUuid()) {
+        if (!getServiceUuid()
+            .equals(other.getServiceUuid())) return false;
       }
-      if (!getDeviceIdsList()
-          .equals(other.getDeviceIdsList())) return false;
-      if (!getLinkIdsList()
-          .equals(other.getLinkIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -8319,86 +22423,82 @@ 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 (getDeviceIdsCount() > 0) {
-        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
       }
-      if (getLinkIdsCount() > 0) {
-        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkIdsList().hashCode();
+      if (hasServiceUuid()) {
+        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId 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.Topology parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Topology parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId 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.Topology parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Topology parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceId 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.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Topology parseFrom(
+    public static context.ContextOuterClass.ServiceId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -8411,7 +22511,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Topology prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -8427,26 +22527,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Topology}
+     * <pre>
+     * ----- Service -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.ServiceId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Topology)
-        context.ContextOuterClass.TopologyOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceId)
+        context.ContextOuterClass.ServiceIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Topology_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Topology.class, context.ContextOuterClass.Topology.Builder.class);
+                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Topology.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -8459,30 +22563,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDeviceIdsFieldBuilder();
-          getLinkIdsFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
         }
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
         } else {
-          deviceIdsBuilder_.clear();
+          contextId_ = null;
+          contextIdBuilder_ = null;
         }
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
         } else {
-          linkIdsBuilder_.clear();
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
         }
         return this;
       }
@@ -8490,17 +22586,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Topology_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Topology getDefaultInstanceForType() {
-        return context.ContextOuterClass.Topology.getDefaultInstance();
+      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Topology build() {
-        context.ContextOuterClass.Topology result = buildPartial();
+      public context.ContextOuterClass.ServiceId build() {
+        context.ContextOuterClass.ServiceId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -8508,31 +22604,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Topology buildPartial() {
-        context.ContextOuterClass.Topology result = new context.ContextOuterClass.Topology(this);
-        int from_bitField0_ = bitField0_;
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
-        } else {
-          result.topologyId_ = topologyIdBuilder_.build();
-        }
-        if (deviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.deviceIds_ = deviceIds_;
+      public context.ContextOuterClass.ServiceId buildPartial() {
+        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
         } else {
-          result.deviceIds_ = deviceIdsBuilder_.build();
+          result.contextId_ = contextIdBuilder_.build();
         }
-        if (linkIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.linkIds_ = linkIds_;
+        if (serviceUuidBuilder_ == null) {
+          result.serviceUuid_ = serviceUuid_;
         } else {
-          result.linkIds_ = linkIdsBuilder_.build();
+          result.serviceUuid_ = serviceUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -8572,70 +22654,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Topology) {
-          return mergeFrom((context.ContextOuterClass.Topology)other);
+        if (other instanceof context.ContextOuterClass.ServiceId) {
+          return mergeFrom((context.ContextOuterClass.ServiceId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Topology other) {
-        if (other == context.ContextOuterClass.Topology.getDefaultInstance()) return this;
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
-        }
-        if (deviceIdsBuilder_ == null) {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIds_.isEmpty()) {
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDeviceIdsIsMutable();
-              deviceIds_.addAll(other.deviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIdsBuilder_.isEmpty()) {
-              deviceIdsBuilder_.dispose();
-              deviceIdsBuilder_ = null;
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              deviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceIdsFieldBuilder() : null;
-            } else {
-              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
+        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
         }
-        if (linkIdsBuilder_ == null) {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIds_.isEmpty()) {
-              linkIds_ = other.linkIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureLinkIdsIsMutable();
-              linkIds_.addAll(other.linkIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIdsBuilder_.isEmpty()) {
-              linkIdsBuilder_.dispose();
-              linkIdsBuilder_ = null;
-              linkIds_ = other.linkIds_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              linkIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkIdsFieldBuilder() : null;
-            } else {
-              linkIdsBuilder_.addAllMessages(other.linkIds_);
-            }
-          }
+        if (other.hasServiceUuid()) {
+          mergeServiceUuid(other.getServiceUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -8652,11 +22685,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Topology parsedMessage = null;
+        context.ContextOuterClass.ServiceId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Topology) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -8665,605 +22698,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      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 {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
-        
-        onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <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_;
-        }
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
+      private context.ContextOuterClass.ContextId contextId_;
       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 java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
-
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-        if (deviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceIds_);
-        } else {
-          return deviceIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public int getDeviceIdsCount() {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.size();
-        } else {
-          return deviceIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);
-        } else {
-          return deviceIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, value);
-          onChanged();
-        } else {
-          deviceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          deviceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(value);
-          onChanged();
-        } else {
-          deviceIdsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, value);
-          onChanged();
-        } else {
-          deviceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder addDeviceIds(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          deviceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          deviceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder addAllDeviceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceIds_);
-          onChanged();
-        } else {
-          deviceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder clearDeviceIds() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          deviceIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public Builder removeDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.remove(index);
-          onChanged();
-        } else {
-          deviceIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
-          int index) {
-        return getDeviceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-          int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);  } else {
-          return deviceIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-           getDeviceIdsOrBuilderList() {
-        if (deviceIdsBuilder_ != null) {
-          return deviceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(deviceIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.DeviceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
-          int index) {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
-           getDeviceIdsBuilderList() {
-        return getDeviceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdsFieldBuilder() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  deviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          deviceIds_ = null;
-        }
-        return deviceIdsBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
-        java.util.Collections.emptyList();
-      private void ensureLinkIdsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
-          bitField0_ |= 0x00000002;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
-
-      /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-        if (linkIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkIds_);
-        } else {
-          return linkIdsBuilder_.getMessageList();
-        }
-      }
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
        */
-      public int getLinkIdsCount() {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.size();
-        } else {
-          return linkIdsBuilder_.getCount();
-        }
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
        */
-      public context.ContextOuterClass.LinkId getLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         } else {
-          return linkIdsBuilder_.getMessage(index);
+          return contextIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, value);
+          contextId_ = value;
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, value);
+          contextIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, builderForValue.build());
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdsBuilder_.setMessage(index, builderForValue.build());
+          contextIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(value);
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(value);
+          contextIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, value);
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, value);
+          contextId_ = null;
+          contextIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addLinkIds(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
         } else {
-          linkIdsBuilder_.addMessage(builderForValue.build());
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          linkIdsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
         }
-        return this;
+        return contextIdBuilder_;
       }
+
+      private context.ContextOuterClass.Uuid serviceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return Whether the serviceUuid field is set.
        */
-      public Builder addAllLinkIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkIds_);
-          onChanged();
+      public boolean hasServiceUuid() {
+        return serviceUuidBuilder_ != null || serviceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       * @return The serviceUuid.
+       */
+      public context.ContextOuterClass.Uuid getServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
         } else {
-          linkIdsBuilder_.addAllMessages(values);
+          return serviceUuidBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public Builder clearLinkIds() {
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceUuid_ = value;
           onChanged();
         } else {
-          linkIdsBuilder_.clear();
+          serviceUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public Builder removeLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.remove(index);
+      public Builder setServiceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdsBuilder_.remove(index);
+          serviceUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
-       */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-          int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);  } else {
-          return linkIdsBuilder_.getMessageOrBuilder(index);
+      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (serviceUuid_ != null) {
+            serviceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            serviceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          serviceUuidBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-           getLinkIdsOrBuilderList() {
-        if (linkIdsBuilder_ != null) {
-          return linkIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(linkIds_);
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
-        return getLinkIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.LinkId.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
+        
+        onChanged();
+        return getServiceUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+        if (serviceUuidBuilder_ != null) {
+          return serviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+        }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 3;</code>
+       * <code>.context.Uuid service_uuid = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
-           getLinkIdsBuilderList() {
-        return getLinkIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdsFieldBuilder() {
-        if (linkIdsBuilder_ == null) {
-          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  linkIds_,
-                  ((bitField0_ & 0x00000002) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getServiceUuidFieldBuilder() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getServiceUuid(),
                   getParentForChildren(),
                   isClean());
-          linkIds_ = null;
+          serviceUuid_ = null;
         }
-        return linkIdsBuilder_;
+        return serviceUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -9278,128 +22949,292 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Topology)
+      // @@protoc_insertion_point(builder_scope:context.ServiceId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Topology)
-    private static final context.ContextOuterClass.Topology DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceId)
+    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Topology();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
     }
 
-    public static context.ContextOuterClass.Topology getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Topology>
-        PARSER = new com.google.protobuf.AbstractParser<Topology>() {
+    private static final com.google.protobuf.Parser<ServiceId>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
       @java.lang.Override
-      public Topology parsePartialFrom(
+      public ServiceId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Topology(input, extensionRegistry);
+        return new ServiceId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Topology> parser() {
+    public static com.google.protobuf.Parser<ServiceId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Topology> getParserForType() {
+    public com.google.protobuf.Parser<ServiceId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Topology getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyIdList)
+  public interface ServiceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Service)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
      */
-    java.util.List<context.ContextOuterClass.TopologyId> 
-        getTopologyIdsList();
+    boolean hasServiceId();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.TopologyId getTopologyIds(int index);
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
      */
-    int getTopologyIdsCount();
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The enum numeric value on the wire for serviceType.
      */
-    java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList();
+    int getServiceTypeValue();
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The serviceType.
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+    context.ContextOuterClass.ServiceTypeEnum getServiceType();
+
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getServiceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    int getServiceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getServiceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    context.ContextOuterClass.Constraint getServiceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    int getServiceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
         int index);
+
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    boolean hasServiceStatus();
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return The serviceStatus.
+     */
+    context.ContextOuterClass.ServiceStatus getServiceStatus();
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     */
+    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
+
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    boolean hasServiceConfig();
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return The serviceConfig.
+     */
+    context.ContextOuterClass.ServiceConfig getServiceConfig();
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     */
+    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
+
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return Whether the timestamp field is set.
+     */
+    boolean hasTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return The timestamp.
+     */
+    context.ContextOuterClass.Timestamp getTimestamp();
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     */
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code context.TopologyIdList}
+   * Protobuf type {@code context.Service}
    */
-  public static final class TopologyIdList extends
+  public static final class Service extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyIdList)
-      TopologyIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Service)
+      ServiceOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyIdList.newBuilder() to construct.
-    private TopologyIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Service.newBuilder() to construct.
+    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyIdList() {
-      topologyIds_ = java.util.Collections.emptyList();
+    private Service() {
+      serviceType_ = 0;
+      serviceEndpointIds_ = java.util.Collections.emptyList();
+      serviceConstraints_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyIdList();
+      return new Service();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
     }
+    private Service(
+        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.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 16: {
+              int rawValue = input.readEnum();
+
+              serviceType_ = rawValue;
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              serviceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              serviceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
+              if (serviceStatus_ != null) {
+                subBuilder = serviceStatus_.toBuilder();
+              }
+              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceStatus_);
+                serviceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
+              if (serviceConfig_ != null) {
+                subBuilder = serviceConfig_.toBuilder();
+              }
+              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceConfig_);
+                serviceConfig_ = subBuilder.buildPartial();
+              }
 
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private TopologyIdList(
-        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)) {
-                topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>();
-                mutable_bitField0_ |= 0x00000001;
+            }
+            case 58: {
+              context.ContextOuterClass.Timestamp.Builder subBuilder = null;
+              if (timestamp_ != null) {
+                subBuilder = timestamp_.toBuilder();
               }
-              topologyIds_.add(
-                  input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry));
+              timestamp_ = input.readMessage(context.ContextOuterClass.Timestamp.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(timestamp_);
+                timestamp_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -9418,7 +23253,10 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -9426,55 +23264,218 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_Service_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
     }
 
-    public static final int TOPOLOGY_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_;
+    public static final int SERVICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-      return topologyIds_;
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-        getTopologyIdsOrBuilderList() {
-      return topologyIds_;
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 1;</code>
      */
     @java.lang.Override
-    public int getTopologyIdsCount() {
-      return topologyIds_.size();
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
     }
+
+    public static final int SERVICE_TYPE_FIELD_NUMBER = 2;
+    private int serviceType_;
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The enum numeric value on the wire for serviceType.
+     */
+    @java.lang.Override public int getServiceTypeValue() {
+      return serviceType_;
+    }
+    /**
+     * <code>.context.ServiceTypeEnum service_type = 2;</code>
+     * @return The serviceType.
+     */
+    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-      return topologyIds_.get(index);
+    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+      return serviceEndpointIds_;
     }
     /**
-     * <code>repeated .context.TopologyId topology_ids = 1;</code>
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getServiceEndpointIdsOrBuilderList() {
+      return serviceEndpointIds_;
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public int getServiceEndpointIdsCount() {
+      return serviceEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+      return serviceEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
         int index) {
-      return topologyIds_.get(index);
+      return serviceEndpointIds_.get(index);
+    }
+
+    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+      return serviceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getServiceConstraintsOrBuilderList() {
+      return serviceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public int getServiceConstraintsCount() {
+      return serviceConstraints_.size();
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+      return serviceConstraints_.get(index);
+    }
+    /**
+     * <code>repeated .context.Constraint service_constraints = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+        int index) {
+      return serviceConstraints_.get(index);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.ServiceStatus serviceStatus_;
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return Whether the serviceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceStatus() {
+      return serviceStatus_ != null;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     * @return The serviceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatus service_status = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+      return getServiceStatus();
+    }
+
+    public static final int SERVICE_CONFIG_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.ServiceConfig serviceConfig_;
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return Whether the serviceConfig field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceConfig() {
+      return serviceConfig_ != null;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     * @return The serviceConfig.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+    }
+    /**
+     * <code>.context.ServiceConfig service_config = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+      return getServiceConfig();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -9491,8 +23492,26 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < topologyIds_.size(); i++) {
-        output.writeMessage(1, topologyIds_.get(i));
+      if (serviceId_ != null) {
+        output.writeMessage(1, getServiceId());
+      }
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        output.writeEnum(2, serviceType_);
+      }
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        output.writeMessage(3, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        output.writeMessage(4, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        output.writeMessage(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        output.writeMessage(6, getServiceConfig());
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(7, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -9503,9 +23522,33 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < topologyIds_.size(); i++) {
+      if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, topologyIds_.get(i));
+          .computeMessageSize(1, getServiceId());
+      }
+      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, serviceType_);
+      }
+      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, serviceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < serviceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, serviceConstraints_.get(i));
+      }
+      if (serviceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceConfig());
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -9517,13 +23560,36 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.Service)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyIdList other = (context.ContextOuterClass.TopologyIdList) obj;
+      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
 
-      if (!getTopologyIdsList()
-          .equals(other.getTopologyIdsList())) return false;
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
+      if (serviceType_ != other.serviceType_) return false;
+      if (!getServiceEndpointIdsList()
+          .equals(other.getServiceEndpointIdsList())) return false;
+      if (!getServiceConstraintsList()
+          .equals(other.getServiceConstraintsList())) return false;
+      if (hasServiceStatus() != other.hasServiceStatus()) return false;
+      if (hasServiceStatus()) {
+        if (!getServiceStatus()
+            .equals(other.getServiceStatus())) return false;
+      }
+      if (hasServiceConfig() != other.hasServiceConfig()) return false;
+      if (hasServiceConfig()) {
+        if (!getServiceConfig()
+            .equals(other.getServiceConfig())) 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;
     }
@@ -9535,78 +23601,100 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getTopologyIdsCount() > 0) {
-        hash = (37 * hash) + TOPOLOGY_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologyIdsList().hashCode();
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
+      }
+      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
+      hash = (53 * hash) + serviceType_;
+      if (getServiceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
+      }
+      if (getServiceConstraintsCount() > 0) {
+        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConstraintsList().hashCode();
+      }
+      if (hasServiceStatus()) {
+        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceStatus().hashCode();
+      }
+      if (hasServiceConfig()) {
+        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceConfig().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 context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service 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.TopologyIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Service parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Service parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service 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.TopologyIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Service parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.Service 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.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyIdList parseFrom(
+    public static context.ContextOuterClass.Service parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -9619,7 +23707,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -9635,26 +23723,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyIdList}
+     * Protobuf type {@code context.Service}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyIdList)
-        context.ContextOuterClass.TopologyIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Service)
+        context.ContextOuterClass.ServiceOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyIdList.class, context.ContextOuterClass.TopologyIdList.Builder.class);
+                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyIdList.newBuilder()
+      // Construct using context.ContextOuterClass.Service.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -9667,17 +23755,50 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getTopologyIdsFieldBuilder();
+          getServiceEndpointIdsFieldBuilder();
+          getServiceConstraintsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        serviceType_ = 0;
+
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          topologyIdsBuilder_.clear();
+          serviceEndpointIdsBuilder_.clear();
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
         return this;
       }
@@ -9685,17 +23806,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyIdList.getDefaultInstance();
+      public context.ContextOuterClass.Service getDefaultInstanceForType() {
+        return context.ContextOuterClass.Service.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList build() {
-        context.ContextOuterClass.TopologyIdList result = buildPartial();
+      public context.ContextOuterClass.Service build() {
+        context.ContextOuterClass.Service result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -9703,17 +23824,47 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyIdList buildPartial() {
-        context.ContextOuterClass.TopologyIdList result = new context.ContextOuterClass.TopologyIdList(this);
+      public context.ContextOuterClass.Service buildPartial() {
+        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
         int from_bitField0_ = bitField0_;
-        if (topologyIdsBuilder_ == null) {
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
+        }
+        result.serviceType_ = serviceType_;
+        if (serviceEndpointIdsBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            topologyIds_ = java.util.Collections.unmodifiableList(topologyIds_);
+            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.topologyIds_ = topologyIds_;
+          result.serviceEndpointIds_ = serviceEndpointIds_;
         } else {
-          result.topologyIds_ = topologyIdsBuilder_.build();
+          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.serviceConstraints_ = serviceConstraints_;
+        } else {
+          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
+        }
+        if (serviceStatusBuilder_ == null) {
+          result.serviceStatus_ = serviceStatus_;
+        } else {
+          result.serviceStatus_ = serviceStatusBuilder_.build();
+        }
+        if (serviceConfigBuilder_ == null) {
+          result.serviceConfig_ = serviceConfig_;
+        } else {
+          result.serviceConfig_ = serviceConfigBuilder_.build();
+        }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
         }
         onBuilt();
         return result;
@@ -9753,42 +23904,83 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyIdList) {
-          return mergeFrom((context.ContextOuterClass.TopologyIdList)other);
+        if (other instanceof context.ContextOuterClass.Service) {
+          return mergeFrom((context.ContextOuterClass.Service)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyIdList other) {
-        if (other == context.ContextOuterClass.TopologyIdList.getDefaultInstance()) return this;
-        if (topologyIdsBuilder_ == null) {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIds_.isEmpty()) {
-              topologyIds_ = other.topologyIds_;
+      public Builder mergeFrom(context.ContextOuterClass.Service other) {
+        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        if (other.serviceType_ != 0) {
+          setServiceTypeValue(other.getServiceTypeValue());
+        }
+        if (serviceEndpointIdsBuilder_ == null) {
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIds_.isEmpty()) {
+              serviceEndpointIds_ = other.serviceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureTopologyIdsIsMutable();
-              topologyIds_.addAll(other.topologyIds_);
+              ensureServiceEndpointIdsIsMutable();
+              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
             }
             onChanged();
           }
         } else {
-          if (!other.topologyIds_.isEmpty()) {
-            if (topologyIdsBuilder_.isEmpty()) {
-              topologyIdsBuilder_.dispose();
-              topologyIdsBuilder_ = null;
-              topologyIds_ = other.topologyIds_;
+          if (!other.serviceEndpointIds_.isEmpty()) {
+            if (serviceEndpointIdsBuilder_.isEmpty()) {
+              serviceEndpointIdsBuilder_.dispose();
+              serviceEndpointIdsBuilder_ = null;
+              serviceEndpointIds_ = other.serviceEndpointIds_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              topologyIdsBuilder_ = 
+              serviceEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceEndpointIdsFieldBuilder() : null;
+            } else {
+              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
+            }
+          }
+        }
+        if (serviceConstraintsBuilder_ == null) {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraints_.isEmpty()) {
+              serviceConstraints_ = other.serviceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureServiceConstraintsIsMutable();
+              serviceConstraints_.addAll(other.serviceConstraints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceConstraints_.isEmpty()) {
+            if (serviceConstraintsBuilder_.isEmpty()) {
+              serviceConstraintsBuilder_.dispose();
+              serviceConstraintsBuilder_ = null;
+              serviceConstraints_ = other.serviceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              serviceConstraintsBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologyIdsFieldBuilder() : null;
+                   getServiceConstraintsFieldBuilder() : null;
             } else {
-              topologyIdsBuilder_.addAllMessages(other.topologyIds_);
+              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
             }
           }
         }
+        if (other.hasServiceStatus()) {
+          mergeServiceStatus(other.getServiceStatus());
+        }
+        if (other.hasServiceConfig()) {
+          mergeServiceConfig(other.getServiceConfig());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -9804,11 +23996,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyIdList parsedMessage = null;
+        context.ContextOuterClass.Service parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -9819,1037 +24011,1014 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.TopologyId> topologyIds_ =
+      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 = 1;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 1;</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 = 1;</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 int serviceType_ = 0;
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return The enum numeric value on the wire for serviceType.
+       */
+      @java.lang.Override public int getServiceTypeValue() {
+        return serviceType_;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @param value The enum numeric value on the wire for serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceTypeValue(int value) {
+        
+        serviceType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return The serviceType.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
+        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @param value The serviceType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        serviceType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceTypeEnum service_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceType() {
+        
+        serviceType_ = 0;
+        onChanged();
+        return this;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
         java.util.Collections.emptyList();
-      private void ensureTopologyIdsIsMutable() {
+      private void ensureServiceEndpointIdsIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          topologyIds_ = new java.util.ArrayList<context.ContextOuterClass.TopologyId>(topologyIds_);
+          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdsBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
 
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public java.util.List<context.ContextOuterClass.TopologyId> getTopologyIdsList() {
-        if (topologyIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologyIds_);
+      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
         } else {
-          return topologyIdsBuilder_.getMessageList();
+          return serviceEndpointIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public int getTopologyIdsCount() {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.size();
+      public int getServiceEndpointIdsCount() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.size();
         } else {
-          return topologyIdsBuilder_.getCount();
+          return serviceEndpointIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public context.ContextOuterClass.TopologyId getTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);
+      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);
         } else {
-          return topologyIdsBuilder_.getMessage(index);
+          return serviceEndpointIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, value);
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, value);
           onChanged();
         } else {
-          topologyIdsBuilder_.setMessage(index, value);
+          serviceEndpointIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder setTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.set(index, builderForValue.build());
+      public Builder setServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.setMessage(index, builderForValue.build());
+          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder addTopologyIds(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
+      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(value);
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(value);
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(value);
+          serviceEndpointIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId value) {
-        if (topologyIdsBuilder_ == null) {
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (serviceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, value);
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, value);
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(index, value);
+          serviceEndpointIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder addTopologyIds(
-          context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(builderForValue.build());
+      public Builder addServiceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(builderForValue.build());
+          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder addTopologyIds(
-          int index, context.ContextOuterClass.TopologyId.Builder builderForValue) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.add(index, builderForValue.build());
+      public Builder addServiceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.addMessage(index, builderForValue.build());
+          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
        */
-      public Builder addAllTopologyIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.TopologyId> values) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
+      public Builder addAllServiceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologyIds_);
+              values, serviceEndpointIds_);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder clearServiceEndpointIds() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public Builder removeServiceEndpointIds(int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          ensureServiceEndpointIdsIsMutable();
+          serviceEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          serviceEndpointIdsBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
+          int index) {
+        if (serviceEndpointIdsBuilder_ == null) {
+          return serviceEndpointIds_.get(index);  } else {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getServiceEndpointIdsOrBuilderList() {
+        if (serviceEndpointIdsBuilder_ != null) {
+          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
+          int index) {
+        return getServiceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getServiceEndpointIdsBuilderList() {
+        return getServiceEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getServiceEndpointIdsFieldBuilder() {
+        if (serviceEndpointIdsBuilder_ == null) {
+          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  serviceEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceEndpointIds_ = null;
+        }
+        return serviceEndpointIdsBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
+        java.util.Collections.emptyList();
+      private void ensureServiceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
+          bitField0_ |= 0x00000002;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
+
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
+        if (serviceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        } else {
+          return serviceConstraintsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public int getServiceConstraintsCount() {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.size();
+        } else {
+          return serviceConstraintsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);
+        } else {
+          return serviceConstraintsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder setServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(value);
           onChanged();
         } else {
-          topologyIdsBuilder_.addAllMessages(values);
+          serviceConstraintsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder clearTopologyIds() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (serviceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, value);
           onChanged();
         } else {
-          topologyIdsBuilder_.clear();
+          serviceConstraintsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public Builder removeTopologyIds(int index) {
-        if (topologyIdsBuilder_ == null) {
-          ensureTopologyIdsIsMutable();
-          topologyIds_.remove(index);
+      public Builder addServiceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(builderForValue.build());
           onChanged();
         } else {
-          topologyIdsBuilder_.remove(index);
+          serviceConstraintsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdsOrBuilder(
-          int index) {
-        if (topologyIdsBuilder_ == null) {
-          return topologyIds_.get(index);  } else {
-          return topologyIdsBuilder_.getMessageOrBuilder(index);
-        }
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyIdOrBuilder> 
-           getTopologyIdsOrBuilderList() {
-        if (topologyIdsBuilder_ != null) {
-          return topologyIdsBuilder_.getMessageOrBuilderList();
+      public Builder addServiceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(topologyIds_);
+          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder() {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.TopologyId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder addTopologyIdsBuilder(
-          int index) {
-        return getTopologyIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.TopologyId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.TopologyId topology_ids = 1;</code>
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.TopologyId.Builder> 
-           getTopologyIdsBuilderList() {
-        return getTopologyIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> 
-          getTopologyIdsFieldBuilder() {
-        if (topologyIdsBuilder_ == null) {
-          topologyIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder>(
-                  topologyIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          topologyIds_ = null;
-        }
-        return topologyIdsBuilder_;
-      }
-      @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.TopologyIdList)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.TopologyIdList)
-    private static final context.ContextOuterClass.TopologyIdList DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyIdList();
-    }
-
-    public static context.ContextOuterClass.TopologyIdList getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<TopologyIdList>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyIdList>() {
-      @java.lang.Override
-      public TopologyIdList parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyIdList(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<TopologyIdList> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<TopologyIdList> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface TopologyListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyList)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Topology> 
-        getTopologiesList();
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    context.ContextOuterClass.Topology getTopologies(int index);
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    int getTopologiesCount();
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-        getTopologiesOrBuilderList();
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code context.TopologyList}
-   */
-  public static final class TopologyList extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyList)
-      TopologyListOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use TopologyList.newBuilder() to construct.
-    private TopologyList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private TopologyList() {
-      topologies_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new TopologyList();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private TopologyList(
-        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)) {
-                topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              topologies_.add(
-                  input.readMessage(context.ContextOuterClass.Topology.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)) {
-          topologies_ = java.util.Collections.unmodifiableList(topologies_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
-    }
-
-    public static final int TOPOLOGIES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Topology> topologies_;
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
-      return topologies_;
-    }
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-        getTopologiesOrBuilderList() {
-      return topologies_;
-    }
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    @java.lang.Override
-    public int getTopologiesCount() {
-      return topologies_.size();
-    }
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Topology getTopologies(int index) {
-      return topologies_.get(index);
-    }
-    /**
-     * <code>repeated .context.Topology topologies = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
-        int index) {
-      return topologies_.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 < topologies_.size(); i++) {
-        output.writeMessage(1, topologies_.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 < topologies_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, topologies_.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.TopologyList)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.TopologyList other = (context.ContextOuterClass.TopologyList) obj;
-
-      if (!getTopologiesList()
-          .equals(other.getTopologiesList())) 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 (getTopologiesCount() > 0) {
-        hash = (37 * hash) + TOPOLOGIES_FIELD_NUMBER;
-        hash = (53 * hash) + getTopologiesList().hashCode();
-      }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.TopologyList parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.TopologyList parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.TopologyList parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.TopologyList 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.TopologyList parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.TopologyList parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.TopologyList parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.TopologyList 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.TopologyList parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.TopologyList 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.TopologyList parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.TopologyList 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.TopologyList 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.TopologyList}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyList)
-        context.ContextOuterClass.TopologyListOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyList.class, context.ContextOuterClass.TopologyList.Builder.class);
-      }
-
-      // Construct using context.ContextOuterClass.TopologyList.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getTopologiesFieldBuilder();
+      public Builder addAllServiceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, serviceConstraints_);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.addAllMessages(values);
         }
+        return this;
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (topologiesBuilder_ == null) {
-          topologies_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder clearServiceConstraints() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
         } else {
-          topologiesBuilder_.clear();
+          serviceConstraintsBuilder_.clear();
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyList_descriptor;
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public Builder removeServiceConstraints(int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          ensureServiceConstraintsIsMutable();
+          serviceConstraints_.remove(index);
+          onChanged();
+        } else {
+          serviceConstraintsBuilder_.remove(index);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyList.getDefaultInstance();
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().getBuilder(index);
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.TopologyList build() {
-        context.ContextOuterClass.TopologyList result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
+          int index) {
+        if (serviceConstraintsBuilder_ == null) {
+          return serviceConstraints_.get(index);  } else {
+          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
         }
-        return result;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.TopologyList buildPartial() {
-        context.ContextOuterClass.TopologyList result = new context.ContextOuterClass.TopologyList(this);
-        int from_bitField0_ = bitField0_;
-        if (topologiesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            topologies_ = java.util.Collections.unmodifiableList(topologies_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.topologies_ = topologies_;
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getServiceConstraintsOrBuilderList() {
+        if (serviceConstraintsBuilder_ != null) {
+          return serviceConstraintsBuilder_.getMessageOrBuilderList();
         } else {
-          result.topologies_ = topologiesBuilder_.build();
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
         }
-        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);
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getServiceConstraintsBuilderList() {
+        return getServiceConstraintsFieldBuilder().getBuilderList();
       }
-      @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 com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getServiceConstraintsFieldBuilder() {
+        if (serviceConstraintsBuilder_ == null) {
+          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  serviceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceConstraints_ = null;
+        }
+        return serviceConstraintsBuilder_;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+
+      private context.ContextOuterClass.ServiceStatus serviceStatus_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       * @return Whether the serviceStatus field is set.
+       */
+      public boolean hasServiceStatus() {
+        return serviceStatusBuilder_ != null || serviceStatus_ != null;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyList) {
-          return mergeFrom((context.ContextOuterClass.TopologyList)other);
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       * @return The serviceStatus.
+       */
+      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return serviceStatusBuilder_.getMessage();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.TopologyList other) {
-        if (other == context.ContextOuterClass.TopologyList.getDefaultInstance()) return this;
-        if (topologiesBuilder_ == null) {
-          if (!other.topologies_.isEmpty()) {
-            if (topologies_.isEmpty()) {
-              topologies_ = other.topologies_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureTopologiesIsMutable();
-              topologies_.addAll(other.topologies_);
-            }
-            onChanged();
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          serviceStatus_ = value;
+          onChanged();
         } else {
-          if (!other.topologies_.isEmpty()) {
-            if (topologiesBuilder_.isEmpty()) {
-              topologiesBuilder_.dispose();
-              topologiesBuilder_ = null;
-              topologies_ = other.topologies_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              topologiesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getTopologiesFieldBuilder() : null;
-            } else {
-              topologiesBuilder_.addAllMessages(other.topologies_);
-            }
-          }
+          serviceStatusBuilder_.setMessage(value);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
+
         return this;
       }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder setServiceStatus(
+          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceStatusBuilder_.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 {
-        context.ContextOuterClass.TopologyList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
+        if (serviceStatusBuilder_ == null) {
+          if (serviceStatus_ != null) {
+            serviceStatus_ =
+              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
+          } else {
+            serviceStatus_ = value;
           }
+          onChanged();
+        } else {
+          serviceStatusBuilder_.mergeFrom(value);
         }
+
         return this;
       }
-      private int bitField0_;
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public Builder clearServiceStatus() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatus_ = null;
+          onChanged();
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
 
-      private java.util.List<context.ContextOuterClass.Topology> topologies_ =
-        java.util.Collections.emptyList();
-      private void ensureTopologiesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          topologies_ = new java.util.ArrayList<context.ContextOuterClass.Topology>(topologies_);
-          bitField0_ |= 0x00000001;
-         }
+        return this;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> topologiesBuilder_;
-
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public java.util.List<context.ContextOuterClass.Topology> getTopologiesList() {
-        if (topologiesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(topologies_);
+      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
+        
+        onChanged();
+        return getServiceStatusFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceStatus service_status = 5;</code>
+       */
+      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
+        if (serviceStatusBuilder_ != null) {
+          return serviceStatusBuilder_.getMessageOrBuilder();
         } else {
-          return topologiesBuilder_.getMessageList();
+          return serviceStatus_ == null ?
+              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceStatus service_status = 5;</code>
        */
-      public int getTopologiesCount() {
-        if (topologiesBuilder_ == null) {
-          return topologies_.size();
-        } else {
-          return topologiesBuilder_.getCount();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
+          getServiceStatusFieldBuilder() {
+        if (serviceStatusBuilder_ == null) {
+          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
+                  getServiceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          serviceStatus_ = null;
         }
+        return serviceStatusBuilder_;
       }
+
+      private context.ContextOuterClass.ServiceConfig serviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return Whether the serviceConfig field is set.
        */
-      public context.ContextOuterClass.Topology getTopologies(int index) {
-        if (topologiesBuilder_ == null) {
-          return topologies_.get(index);
+      public boolean hasServiceConfig() {
+        return serviceConfigBuilder_ != null || serviceConfig_ != null;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return The serviceConfig.
+       */
+      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
         } else {
-          return topologiesBuilder_.getMessage(index);
+          return serviceConfigBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder setTopologies(
-          int index, context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
+      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureTopologiesIsMutable();
-          topologies_.set(index, value);
+          serviceConfig_ = value;
           onChanged();
         } else {
-          topologiesBuilder_.setMessage(index, value);
+          serviceConfigBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder setTopologies(
-          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.set(index, builderForValue.build());
+      public Builder setServiceConfig(
+          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = builderForValue.build();
           onChanged();
         } else {
-          topologiesBuilder_.setMessage(index, builderForValue.build());
+          serviceConfigBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder addTopologies(context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (serviceConfig_ != null) {
+            serviceConfig_ =
+              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
+          } else {
+            serviceConfig_ = value;
           }
-          ensureTopologiesIsMutable();
-          topologies_.add(value);
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(value);
+          serviceConfigBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder addTopologies(
-          int index, context.ContextOuterClass.Topology value) {
-        if (topologiesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureTopologiesIsMutable();
-          topologies_.add(index, value);
+      public Builder clearServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
           onChanged();
         } else {
-          topologiesBuilder_.addMessage(index, value);
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder addTopologies(
-          context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
+        
+        onChanged();
+        return getServiceConfigFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
+        if (serviceConfigBuilder_ != null) {
+          return serviceConfigBuilder_.getMessageOrBuilder();
         } else {
-          topologiesBuilder_.addMessage(builderForValue.build());
+          return serviceConfig_ == null ?
+              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.ServiceConfig service_config = 6;</code>
        */
-      public Builder addTopologies(
-          int index, context.ContextOuterClass.Topology.Builder builderForValue) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          topologiesBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
+          getServiceConfigFieldBuilder() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
+                  getServiceConfig(),
+                  getParentForChildren(),
+                  isClean());
+          serviceConfig_ = null;
         }
-        return this;
+        return serviceConfigBuilder_;
       }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
+       * @return Whether the timestamp field is set.
        */
-      public Builder addAllTopologies(
-          java.lang.Iterable<? extends context.ContextOuterClass.Topology> values) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, topologies_);
-          onChanged();
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 7;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         } else {
-          topologiesBuilder_.addAllMessages(values);
+          return timestampBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public Builder clearTopologies() {
-        if (topologiesBuilder_ == null) {
-          topologies_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
           onChanged();
         } else {
-          topologiesBuilder_.clear();
+          timestampBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public Builder removeTopologies(int index) {
-        if (topologiesBuilder_ == null) {
-          ensureTopologiesIsMutable();
-          topologies_.remove(index);
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          topologiesBuilder_.remove(index);
+          timestampBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
-       */
-      public context.ContextOuterClass.Topology.Builder getTopologiesBuilder(
-          int index) {
-        return getTopologiesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public context.ContextOuterClass.TopologyOrBuilder getTopologiesOrBuilder(
-          int index) {
-        if (topologiesBuilder_ == null) {
-          return topologies_.get(index);  } else {
-          return topologiesBuilder_.getMessageOrBuilder(index);
+      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>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.TopologyOrBuilder> 
-           getTopologiesOrBuilderList() {
-        if (topologiesBuilder_ != null) {
-          return topologiesBuilder_.getMessageOrBuilderList();
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(topologies_);
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
-       */
-      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder() {
-        return getTopologiesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Topology.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public context.ContextOuterClass.Topology.Builder addTopologiesBuilder(
-          int index) {
-        return getTopologiesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Topology.getDefaultInstance());
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Topology topologies = 1;</code>
+       * <code>.context.Timestamp timestamp = 7;</code>
        */
-      public java.util.List<context.ContextOuterClass.Topology.Builder> 
-           getTopologiesBuilderList() {
-        return getTopologiesFieldBuilder().getBuilderList();
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder> 
-          getTopologiesFieldBuilder() {
-        if (topologiesBuilder_ == null) {
-          topologiesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Topology, context.ContextOuterClass.Topology.Builder, context.ContextOuterClass.TopologyOrBuilder>(
-                  topologies_,
-                  ((bitField0_ & 0x00000001) != 0),
+      /**
+       * <code>.context.Timestamp timestamp = 7;</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());
-          topologies_ = null;
+          timestamp_ = null;
         }
-        return topologiesBuilder_;
+        return timestampBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -10864,100 +25033,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyList)
+      // @@protoc_insertion_point(builder_scope:context.Service)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyList)
-    private static final context.ContextOuterClass.TopologyList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Service)
+    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
     }
 
-    public static context.ContextOuterClass.TopologyList getDefaultInstance() {
+    public static context.ContextOuterClass.Service getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyList>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyList>() {
+    private static final com.google.protobuf.Parser<Service>
+        PARSER = new com.google.protobuf.AbstractParser<Service>() {
       @java.lang.Override
-      public TopologyList parsePartialFrom(
+      public Service parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyList(input, extensionRegistry);
+        return new Service(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyList> parser() {
+    public static com.google.protobuf.Parser<Service> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyList> getParserForType() {
+    public com.google.protobuf.Parser<Service> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Service getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface TopologyEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.TopologyEvent)
+  public interface ServiceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    context.ContextOuterClass.Event getEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
-    /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return Whether the topologyId field is set.
-     */
-    boolean hasTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return The topologyId.
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
      */
-    context.ContextOuterClass.TopologyId getTopologyId();
+    int getServiceStatusValue();
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
      */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
   }
   /**
-   * Protobuf type {@code context.TopologyEvent}
+   * Protobuf type {@code context.ServiceStatus}
    */
-  public static final class TopologyEvent extends
+  public static final class ServiceStatus extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.TopologyEvent)
-      TopologyEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
+      ServiceStatusOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use TopologyEvent.newBuilder() to construct.
-    private TopologyEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceStatus.newBuilder() to construct.
+    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private TopologyEvent() {
+    private ServiceStatus() {
+      serviceStatus_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new TopologyEvent();
+      return new ServiceStatus();
     }
 
     @java.lang.Override
@@ -10965,7 +25116,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private TopologyEvent(
+    private ServiceStatus(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -10983,30 +25134,10 @@ public final class ContextOuterClass {
             case 0:
               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.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = subBuilder.buildPartial();
-              }
+            case 8: {
+              int rawValue = input.readEnum();
 
+              serviceStatus_ = rawValue;
               break;
             }
             default: {
@@ -11030,67 +25161,34 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.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;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-    }
-    /**
-     * <code>.context.Event event = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
     }
 
-    public static final int TOPOLOGY_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.TopologyId topologyId_;
-    /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return Whether the topologyId field is set.
-     */
-    @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
-    }
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
+    private int serviceStatus_;
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
-     * @return The topologyId.
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    @java.lang.Override public int getServiceStatusValue() {
+      return serviceStatus_;
     }
     /**
-     * <code>.context.TopologyId topology_id = 2;</code>
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
+    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11107,11 +25205,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 (topologyId_ != null) {
-        output.writeMessage(2, getTopologyId());
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, serviceStatus_);
       }
       unknownFields.writeTo(output);
     }
@@ -11122,13 +25217,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (topologyId_ != null) {
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getTopologyId());
+          .computeEnumSize(1, serviceStatus_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11140,21 +25231,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.TopologyEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.TopologyEvent other = (context.ContextOuterClass.TopologyEvent) obj;
+      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasTopologyId() != other.hasTopologyId()) return false;
-      if (hasTopologyId()) {
-        if (!getTopologyId()
-            .equals(other.getTopologyId())) return false;
-      }
+      if (serviceStatus_ != other.serviceStatus_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11166,82 +25248,76 @@ 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();
-      }
+      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + serviceStatus_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus 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.TopologyEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceStatus parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus 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.TopologyEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceStatus 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.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.TopologyEvent parseFrom(
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -11254,7 +25330,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.TopologyEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -11270,26 +25346,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.TopologyEvent}
+     * Protobuf type {@code context.ServiceStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.TopologyEvent)
-        context.ContextOuterClass.TopologyEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceStatus)
+        context.ContextOuterClass.ServiceStatusOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.TopologyEvent.class, context.ContextOuterClass.TopologyEvent.Builder.class);
+                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.TopologyEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -11307,35 +25383,25 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
+        serviceStatus_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_TopologyEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.TopologyEvent.getDefaultInstance();
+      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent build() {
-        context.ContextOuterClass.TopologyEvent result = buildPartial();
+      public context.ContextOuterClass.ServiceStatus build() {
+        context.ContextOuterClass.ServiceStatus result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -11343,18 +25409,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.TopologyEvent buildPartial() {
-        context.ContextOuterClass.TopologyEvent result = new context.ContextOuterClass.TopologyEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (topologyIdBuilder_ == null) {
-          result.topologyId_ = topologyId_;
-        } else {
-          result.topologyId_ = topologyIdBuilder_.build();
-        }
+      public context.ContextOuterClass.ServiceStatus buildPartial() {
+        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
+        result.serviceStatus_ = serviceStatus_;
         onBuilt();
         return result;
       }
@@ -11393,21 +25450,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.TopologyEvent) {
-          return mergeFrom((context.ContextOuterClass.TopologyEvent)other);
+        if (other instanceof context.ContextOuterClass.ServiceStatus) {
+          return mergeFrom((context.ContextOuterClass.ServiceStatus)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.TopologyEvent other) {
-        if (other == context.ContextOuterClass.TopologyEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasTopologyId()) {
-          mergeTopologyId(other.getTopologyId());
+      public Builder mergeFrom(context.ContextOuterClass.ServiceStatus other) {
+        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
+        if (other.serviceStatus_ != 0) {
+          setServiceStatusValue(other.getServiceStatusValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -11424,256 +25478,72 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.TopologyEvent parsedMessage = null;
+        context.ContextOuterClass.ServiceStatus parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.TopologyEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-
-      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.
-       */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
-       */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
-        } else {
-          return eventBuilder_.getMessage();
-        }
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          event_ = value;
-          onChanged();
-        } else {
-          eventBuilder_.setMessage(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
-          onChanged();
-        } else {
-          eventBuilder_.setMessage(builderForValue.build());
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 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;
-          }
-          onChanged();
-        } else {
-          eventBuilder_.mergeFrom(value);
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
-          onChanged();
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.Event event = 1;</code>
-       */
-      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 {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
-        }
-      }
-      /**
-       * <code>.context.Event event = 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;
-        }
-        return eventBuilder_;
-      }
-
-      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 = 2;</code>
-       * @return Whether the topologyId field is set.
-       */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
-      }
-      /**
-       * <code>.context.TopologyId topology_id = 2;</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 = 2;</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 = 2;</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 = 2;</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;
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          onChanged();
-        } else {
-          topologyIdBuilder_.mergeFrom(value);
         }
-
         return this;
       }
+
+      private int serviceStatus_ = 0;
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The enum numeric value on the wire for serviceStatus.
        */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override public int getServiceStatusValue() {
+        return serviceStatus_;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The enum numeric value on the wire for serviceStatus to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+      public Builder setServiceStatusValue(int value) {
         
+        serviceStatus_ = value;
         onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The serviceStatus.
        */
-      public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-        if (topologyIdBuilder_ != null) {
-          return topologyIdBuilder_.getMessageOrBuilder();
-        } else {
-          return topologyId_ == null ?
-              context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        }
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
+        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>.context.TopologyId topology_id = 2;</code>
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @param value The serviceStatus to set.
+       * @return This builder for chaining.
        */
-      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;
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
-        return topologyIdBuilder_;
+        
+        serviceStatus_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearServiceStatus() {
+        
+        serviceStatus_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -11688,89 +25558,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.TopologyEvent)
+      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
     }
 
-    // @@protoc_insertion_point(class_scope:context.TopologyEvent)
-    private static final context.ContextOuterClass.TopologyEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
+    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.TopologyEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
     }
 
-    public static context.ContextOuterClass.TopologyEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<TopologyEvent>
-        PARSER = new com.google.protobuf.AbstractParser<TopologyEvent>() {
+    private static final com.google.protobuf.Parser<ServiceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
       @java.lang.Override
-      public TopologyEvent parsePartialFrom(
+      public ServiceStatus parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new TopologyEvent(input, extensionRegistry);
+        return new ServiceStatus(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<TopologyEvent> parser() {
+    public static com.google.protobuf.Parser<ServiceStatus> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<TopologyEvent> getParserForType() {
+    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.TopologyEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceId)
+  public interface ServiceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return Whether the deviceUuid field is set.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    boolean hasDeviceUuid();
+    java.util.List<context.ContextOuterClass.ConfigRule> 
+        getConfigRulesList();
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return The deviceUuid.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.Uuid getDeviceUuid();
+    context.ContextOuterClass.ConfigRule getConfigRules(int index);
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder();
+    int getConfigRulesCount();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList();
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Device --------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.DeviceId}
+   * Protobuf type {@code context.ServiceConfig}
    */
-  public static final class DeviceId extends
+  public static final class ServiceConfig extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceId)
-      DeviceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
+      ServiceConfigOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceId.newBuilder() to construct.
-    private DeviceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceConfig.newBuilder() to construct.
+    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceId() {
+    private ServiceConfig() {
+      configRules_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceId();
+      return new ServiceConfig();
     }
 
     @java.lang.Override
@@ -11778,7 +25654,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceId(
+    private ServiceConfig(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -11786,6 +25662,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 {
@@ -11797,16 +25674,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (deviceUuid_ != null) {
-                subBuilder = deviceUuid_.toBuilder();
-              }
-              deviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceUuid_);
-                deviceUuid_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              configRules_.add(
+                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -11824,47 +25697,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
     }
 
-    public static final int DEVICE_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid deviceUuid_;
+    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return Whether the deviceUuid field is set.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public boolean hasDeviceUuid() {
-      return deviceUuid_ != null;
+    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+      return configRules_;
     }
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
-     * @return The deviceUuid.
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getDeviceUuid() {
-      return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+        getConfigRulesOrBuilderList() {
+      return configRules_;
     }
     /**
-     * <code>.context.Uuid device_uuid = 1;</code>
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-      return getDeviceUuid();
+    public int getConfigRulesCount() {
+      return configRules_.size();
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+      return configRules_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+        int index) {
+      return configRules_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -11881,8 +25771,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (deviceUuid_ != null) {
-        output.writeMessage(1, getDeviceUuid());
+      for (int i = 0; i < configRules_.size(); i++) {
+        output.writeMessage(1, configRules_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -11893,9 +25783,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (deviceUuid_ != null) {
+      for (int i = 0; i < configRules_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDeviceUuid());
+          .computeMessageSize(1, configRules_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -11907,16 +25797,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceId)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceId other = (context.ContextOuterClass.DeviceId) obj;
+      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
 
-      if (hasDeviceUuid() != other.hasDeviceUuid()) return false;
-      if (hasDeviceUuid()) {
-        if (!getDeviceUuid()
-            .equals(other.getDeviceUuid())) return false;
-      }
+      if (!getConfigRulesList()
+          .equals(other.getConfigRulesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -11928,78 +25815,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDeviceUuid()) {
-        hash = (37 * hash) + DEVICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceUuid().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.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig 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.DeviceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceConfig parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceConfig parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig 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.DeviceId parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceConfig 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.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceId parseFrom(
+    public static context.ContextOuterClass.ServiceConfig parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -12012,7 +25899,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -12028,30 +25915,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Device --------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.DeviceId}
+     * Protobuf type {@code context.ServiceConfig}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceId)
-        context.ContextOuterClass.DeviceIdOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceConfig)
+        context.ContextOuterClass.ServiceConfigOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceId.class, context.ContextOuterClass.DeviceId.Builder.class);
+                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceId.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -12064,16 +25947,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = null;
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          deviceUuid_ = null;
-          deviceUuidBuilder_ = null;
+          configRulesBuilder_.clear();
         }
         return this;
       }
@@ -12081,17 +25965,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceId.getDefaultInstance();
+      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId build() {
-        context.ContextOuterClass.DeviceId result = buildPartial();
+      public context.ContextOuterClass.ServiceConfig build() {
+        context.ContextOuterClass.ServiceConfig result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -12099,12 +25983,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceId buildPartial() {
-        context.ContextOuterClass.DeviceId result = new context.ContextOuterClass.DeviceId(this);
-        if (deviceUuidBuilder_ == null) {
-          result.deviceUuid_ = deviceUuid_;
+      public context.ContextOuterClass.ServiceConfig buildPartial() {
+        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
+        int from_bitField0_ = bitField0_;
+        if (configRulesBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.configRules_ = configRules_;
         } else {
-          result.deviceUuid_ = deviceUuidBuilder_.build();
+          result.configRules_ = configRulesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -12144,18 +26033,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceId) {
-          return mergeFrom((context.ContextOuterClass.DeviceId)other);
+        if (other instanceof context.ContextOuterClass.ServiceConfig) {
+          return mergeFrom((context.ContextOuterClass.ServiceConfig)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceId other) {
-        if (other == context.ContextOuterClass.DeviceId.getDefaultInstance()) return this;
-        if (other.hasDeviceUuid()) {
-          mergeDeviceUuid(other.getDeviceUuid());
+      public Builder mergeFrom(context.ContextOuterClass.ServiceConfig other) {
+        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
+        if (configRulesBuilder_ == null) {
+          if (!other.configRules_.isEmpty()) {
+            if (configRules_.isEmpty()) {
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConfigRulesIsMutable();
+              configRules_.addAll(other.configRules_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.configRules_.isEmpty()) {
+            if (configRulesBuilder_.isEmpty()) {
+              configRulesBuilder_.dispose();
+              configRulesBuilder_ = null;
+              configRules_ = other.configRules_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              configRulesBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConfigRulesFieldBuilder() : null;
+            } else {
+              configRulesBuilder_.addAllMessages(other.configRules_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -12172,11 +26084,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceId parsedMessage = null;
+        context.ContextOuterClass.ServiceConfig parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -12185,124 +26097,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+        java.util.Collections.emptyList();
+      private void ensureConfigRulesIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
-      private context.ContextOuterClass.Uuid deviceUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> deviceUuidBuilder_;
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
-       * @return Whether the deviceUuid field is set.
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public boolean hasDeviceUuid() {
-        return deviceUuidBuilder_ != null || deviceUuid_ != null;
+      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
+        if (configRulesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(configRules_);
+        } else {
+          return configRulesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
-       * @return The deviceUuid.
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getDeviceUuid() {
-        if (deviceUuidBuilder_ == null) {
-          return deviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+      public int getConfigRulesCount() {
+        if (configRulesBuilder_ == null) {
+          return configRules_.size();
         } else {
-          return deviceUuidBuilder_.getMessage();
+          return configRulesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setDeviceUuid(context.ContextOuterClass.Uuid value) {
-        if (deviceUuidBuilder_ == null) {
+      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);
+        } else {
+          return configRulesBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceUuid_ = value;
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, value);
           onChanged();
         } else {
-          deviceUuidBuilder_.setMessage(value);
+          configRulesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder setDeviceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = builderForValue.build();
+      public Builder setConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceUuidBuilder_.setMessage(builderForValue.build());
+          configRulesBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule value) {
+        if (configRulesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, value);
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addConfigRules(
+          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          configRulesBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public Builder addAllConfigRules(
+          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, configRules_);
+          onChanged();
+        } else {
+          configRulesBuilder_.addAllMessages(values);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder mergeDeviceUuid(context.ContextOuterClass.Uuid value) {
-        if (deviceUuidBuilder_ == null) {
-          if (deviceUuid_ != null) {
-            deviceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(deviceUuid_).mergeFrom(value).buildPartial();
-          } else {
-            deviceUuid_ = value;
-          }
+      public Builder clearConfigRules() {
+        if (configRulesBuilder_ == null) {
+          configRules_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          deviceUuidBuilder_.mergeFrom(value);
+          configRulesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public Builder clearDeviceUuid() {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuid_ = null;
+      public Builder removeConfigRules(int index) {
+        if (configRulesBuilder_ == null) {
+          ensureConfigRulesIsMutable();
+          configRules_.remove(index);
           onChanged();
         } else {
-          deviceUuid_ = null;
-          deviceUuidBuilder_ = null;
+          configRulesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getDeviceUuidBuilder() {
-        
-        onChanged();
-        return getDeviceUuidFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getDeviceUuidOrBuilder() {
-        if (deviceUuidBuilder_ != null) {
-          return deviceUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+          int index) {
+        if (configRulesBuilder_ == null) {
+          return configRules_.get(index);  } else {
+          return configRulesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
+           getConfigRulesOrBuilderList() {
+        if (configRulesBuilder_ != null) {
+          return configRulesBuilder_.getMessageOrBuilderList();
         } else {
-          return deviceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : deviceUuid_;
+          return java.util.Collections.unmodifiableList(configRules_);
         }
       }
       /**
-       * <code>.context.Uuid device_uuid = 1;</code>
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getDeviceUuidFieldBuilder() {
-        if (deviceUuidBuilder_ == null) {
-          deviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getDeviceUuid(),
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
+        return getConfigRulesFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+          int index) {
+        return getConfigRulesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
+           getConfigRulesBuilderList() {
+        return getConfigRulesFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          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());
-          deviceUuid_ = null;
+          configRules_ = null;
         }
-        return deviceUuidBuilder_;
+        return configRulesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -12317,180 +26351,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceId)
+      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceId)
-    private static final context.ContextOuterClass.DeviceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
+    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
     }
 
-    public static context.ContextOuterClass.DeviceId getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceId>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceId>() {
+    private static final com.google.protobuf.Parser<ServiceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
       @java.lang.Override
-      public DeviceId parsePartialFrom(
+      public ServiceConfig parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceId(input, extensionRegistry);
+        return new ServiceConfig(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceId> parser() {
+    public static com.google.protobuf.Parser<ServiceConfig> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceId> getParserForType() {
+    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Device)
+  public interface ServiceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
-
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The deviceType.
-     */
-    java.lang.String getDeviceType();
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The bytes for deviceType.
-     */
-    com.google.protobuf.ByteString
-        getDeviceTypeBytes();
-
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
-     */
-    boolean hasDeviceConfig();
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
-     */
-    context.ContextOuterClass.DeviceConfig getDeviceConfig();
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     */
-    context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder();
-
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The enum numeric value on the wire for deviceOperationalStatus.
-     */
-    int getDeviceOperationalStatusValue();
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The deviceOperationalStatus.
-     */
-    context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus();
-
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the deviceDrivers.
-     */
-    java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return The count of deviceDrivers.
-     */
-    int getDeviceDriversCount();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the element to return.
-     * @return The deviceDrivers at the given index.
-     */
-    context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index);
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the enum numeric values on the wire for deviceDrivers.
-     */
-    java.util.List<java.lang.Integer>
-    getDeviceDriversValueList();
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of deviceDrivers at the given index.
-     */
-    int getDeviceDriversValue(int index);
-
-    /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.EndPoint> 
-        getDeviceEndpointsList();
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    context.ContextOuterClass.EndPoint getDeviceEndpoints(int index);
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    int getDeviceEndpointsCount();
+    int getServiceIdsCount();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-        getDeviceEndpointsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
-    context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.Device}
+   * Protobuf type {@code context.ServiceIdList}
    */
-  public static final class Device extends
+  public static final class ServiceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Device)
-      DeviceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
+      ServiceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Device.newBuilder() to construct.
-    private Device(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceIdList.newBuilder() to construct.
+    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Device() {
-      deviceType_ = "";
-      deviceOperationalStatus_ = 0;
-      deviceDrivers_ = java.util.Collections.emptyList();
-      deviceEndpoints_ = java.util.Collections.emptyList();
+    private ServiceIdList() {
+      serviceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Device();
+      return new ServiceIdList();
     }
 
     @java.lang.Override
@@ -12498,7 +26447,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Device(
+    private ServiceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -12518,73 +26467,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              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 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              deviceType_ = s;
-              break;
-            }
-            case 26: {
-              context.ContextOuterClass.DeviceConfig.Builder subBuilder = null;
-              if (deviceConfig_ != null) {
-                subBuilder = deviceConfig_.toBuilder();
-              }
-              deviceConfig_ = input.readMessage(context.ContextOuterClass.DeviceConfig.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceConfig_);
-                deviceConfig_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 32: {
-              int rawValue = input.readEnum();
-
-              deviceOperationalStatus_ = rawValue;
-              break;
-            }
-            case 40: {
-              int rawValue = input.readEnum();
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              deviceDrivers_.add(rawValue);
-              break;
-            }
-            case 42: {
-              int length = input.readRawVarint32();
-              int oldLimit = input.pushLimit(length);
-              while(input.getBytesUntilLimit() > 0) {
-                int rawValue = input.readEnum();
-                if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                  deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>();
-                  mutable_bitField0_ |= 0x00000001;
-                }
-                deviceDrivers_.add(rawValue);
-              }
-              input.popLimit(oldLimit);
-              break;
-            }
-            case 50: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              deviceEndpoints_.add(
-                  input.readMessage(context.ContextOuterClass.EndPoint.parser(), extensionRegistry));
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -12603,10 +26491,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
+          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -12614,222 +26499,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Device_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
-    }
-
-    public static final int DEVICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.DeviceId deviceId_;
-    /**
-     * <code>.context.DeviceId device_id = 1;</code>
-     * @return Whether the deviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 1;</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 = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
-    }
-
-    public static final int DEVICE_TYPE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object deviceType_;
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The deviceType.
-     */
-    @java.lang.Override
-    public java.lang.String getDeviceType() {
-      java.lang.Object ref = deviceType_;
-      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();
-        deviceType_ = s;
-        return s;
-      }
-    }
-    /**
-     * <code>string device_type = 2;</code>
-     * @return The bytes for deviceType.
-     */
-    @java.lang.Override
-    public com.google.protobuf.ByteString
-        getDeviceTypeBytes() {
-      java.lang.Object ref = deviceType_;
-      if (ref instanceof java.lang.String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        deviceType_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-
-    public static final int DEVICE_CONFIG_FIELD_NUMBER = 3;
-    private context.ContextOuterClass.DeviceConfig deviceConfig_;
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return Whether the deviceConfig field is set.
-     */
-    @java.lang.Override
-    public boolean hasDeviceConfig() {
-      return deviceConfig_ != null;
-    }
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     * @return The deviceConfig.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-      return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-    }
-    /**
-     * <code>.context.DeviceConfig device_config = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-      return getDeviceConfig();
-    }
-
-    public static final int DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER = 4;
-    private int deviceOperationalStatus_;
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The enum numeric value on the wire for deviceOperationalStatus.
-     */
-    @java.lang.Override public int getDeviceOperationalStatusValue() {
-      return deviceOperationalStatus_;
-    }
-    /**
-     * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-     * @return The deviceOperationalStatus.
-     */
-    @java.lang.Override public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
-      return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
-    }
-
-    public static final int DEVICE_DRIVERS_FIELD_NUMBER = 5;
-    private java.util.List<java.lang.Integer> deviceDrivers_;
-    private static final com.google.protobuf.Internal.ListAdapter.Converter<
-        java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum> deviceDrivers_converter_ =
-            new com.google.protobuf.Internal.ListAdapter.Converter<
-                java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>() {
-              public context.ContextOuterClass.DeviceDriverEnum convert(java.lang.Integer from) {
-                @SuppressWarnings("deprecation")
-                context.ContextOuterClass.DeviceDriverEnum result = context.ContextOuterClass.DeviceDriverEnum.valueOf(from);
-                return result == null ? context.ContextOuterClass.DeviceDriverEnum.UNRECOGNIZED : result;
-              }
-            };
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the deviceDrivers.
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
-      return new com.google.protobuf.Internal.ListAdapter<
-          java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return The count of deviceDrivers.
-     */
-    @java.lang.Override
-    public int getDeviceDriversCount() {
-      return deviceDrivers_.size();
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the element to return.
-     * @return The deviceDrivers at the given index.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
-      return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @return A list containing the enum numeric values on the wire for deviceDrivers.
-     */
-    @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getDeviceDriversValueList() {
-      return deviceDrivers_;
-    }
-    /**
-     * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-     * @param index The index of the value to return.
-     * @return The enum numeric value on the wire of deviceDrivers at the given index.
-     */
-    @java.lang.Override
-    public int getDeviceDriversValue(int index) {
-      return deviceDrivers_.get(index);
+              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
     }
-    private int deviceDriversMemoizedSerializedSize;
 
-    public static final int DEVICE_ENDPOINTS_FIELD_NUMBER = 6;
-    private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_;
+    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
-      return deviceEndpoints_;
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-        getDeviceEndpointsOrBuilderList() {
-      return deviceEndpoints_;
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public int getDeviceEndpointsCount() {
-      return deviceEndpoints_.size();
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
-      return deviceEndpoints_.get(index);
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
     }
     /**
-     * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
         int index) {
-      return deviceEndpoints_.get(index);
+      return serviceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -12846,28 +26564,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      getSerializedSize();
-      if (deviceId_ != null) {
-        output.writeMessage(1, getDeviceId());
-      }
-      if (!getDeviceTypeBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, deviceType_);
-      }
-      if (deviceConfig_ != null) {
-        output.writeMessage(3, getDeviceConfig());
-      }
-      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(4, deviceOperationalStatus_);
-      }
-      if (getDeviceDriversList().size() > 0) {
-        output.writeUInt32NoTag(42);
-        output.writeUInt32NoTag(deviceDriversMemoizedSerializedSize);
-      }
-      for (int i = 0; i < deviceDrivers_.size(); i++) {
-        output.writeEnumNoTag(deviceDrivers_.get(i));
-      }
-      for (int i = 0; i < deviceEndpoints_.size(); i++) {
-        output.writeMessage(6, deviceEndpoints_.get(i));
+      for (int i = 0; i < serviceIds_.size(); i++) {
+        output.writeMessage(1, serviceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -12878,36 +26576,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getDeviceId());
-      }
-      if (!getDeviceTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, deviceType_);
-      }
-      if (deviceConfig_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getDeviceConfig());
-      }
-      if (deviceOperationalStatus_ != context.ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(4, deviceOperationalStatus_);
-      }
-      {
-        int dataSize = 0;
-        for (int i = 0; i < deviceDrivers_.size(); i++) {
-          dataSize += com.google.protobuf.CodedOutputStream
-            .computeEnumSizeNoTag(deviceDrivers_.get(i));
-        }
-        size += dataSize;
-        if (!getDeviceDriversList().isEmpty()) {  size += 1;
-          size += com.google.protobuf.CodedOutputStream
-            .computeUInt32SizeNoTag(dataSize);
-        }deviceDriversMemoizedSerializedSize = dataSize;
-      }
-      for (int i = 0; i < deviceEndpoints_.size(); i++) {
+      for (int i = 0; i < serviceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, deviceEndpoints_.get(i));
+          .computeMessageSize(1, serviceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -12919,27 +26590,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Device)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Device other = (context.ContextOuterClass.Device) obj;
+      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
 
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) return false;
-      }
-      if (!getDeviceType()
-          .equals(other.getDeviceType())) return false;
-      if (hasDeviceConfig() != other.hasDeviceConfig()) return false;
-      if (hasDeviceConfig()) {
-        if (!getDeviceConfig()
-            .equals(other.getDeviceConfig())) return false;
-      }
-      if (deviceOperationalStatus_ != other.deviceOperationalStatus_) return false;
-      if (!deviceDrivers_.equals(other.deviceDrivers_)) return false;
-      if (!getDeviceEndpointsList()
-          .equals(other.getDeviceEndpointsList())) return false;
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -12951,94 +26608,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
-      }
-      hash = (37 * hash) + DEVICE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + getDeviceType().hashCode();
-      if (hasDeviceConfig()) {
-        hash = (37 * hash) + DEVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceConfig().hashCode();
-      }
-      hash = (37 * hash) + DEVICE_OPERATIONAL_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + deviceOperationalStatus_;
-      if (getDeviceDriversCount() > 0) {
-        hash = (37 * hash) + DEVICE_DRIVERS_FIELD_NUMBER;
-        hash = (53 * hash) + deviceDrivers_.hashCode();
-      }
-      if (getDeviceEndpointsCount() > 0) {
-        hash = (37 * hash) + DEVICE_ENDPOINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceEndpointsList().hashCode();
+      if (getServiceIdsCount() > 0) {
+        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceIdsList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList 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.Device parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.Device parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceIdList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList 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.Device parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceIdList 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.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.Device parseFrom(
+    public static context.ContextOuterClass.ServiceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -13051,7 +26692,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Device prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -13067,994 +26708,428 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Device}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Device)
-        context.ContextOuterClass.DeviceOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Device_descriptor;
-      }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Device_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Device.class, context.ContextOuterClass.Device.Builder.class);
-      }
-
-      // Construct using context.ContextOuterClass.Device.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
-      }
-
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
-      }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getDeviceEndpointsFieldBuilder();
-        }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        deviceType_ = "";
-
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
-        } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
-        }
-        deviceOperationalStatus_ = 0;
-
-        deviceDrivers_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpoints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          deviceEndpointsBuilder_.clear();
-        }
-        return this;
-      }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Device_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Device getDefaultInstanceForType() {
-        return context.ContextOuterClass.Device.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Device build() {
-        context.ContextOuterClass.Device result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
-        }
-        return result;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Device buildPartial() {
-        context.ContextOuterClass.Device result = new context.ContextOuterClass.Device(this);
-        int from_bitField0_ = bitField0_;
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        result.deviceType_ = deviceType_;
-        if (deviceConfigBuilder_ == null) {
-          result.deviceConfig_ = deviceConfig_;
-        } else {
-          result.deviceConfig_ = deviceConfigBuilder_.build();
-        }
-        result.deviceOperationalStatus_ = deviceOperationalStatus_;
-        if (((bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = java.util.Collections.unmodifiableList(deviceDrivers_);
-          bitField0_ = (bitField0_ & ~0x00000001);
-        }
-        result.deviceDrivers_ = deviceDrivers_;
-        if (deviceEndpointsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            deviceEndpoints_ = java.util.Collections.unmodifiableList(deviceEndpoints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.deviceEndpoints_ = deviceEndpoints_;
-        } else {
-          result.deviceEndpoints_ = deviceEndpointsBuilder_.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.Device) {
-          return mergeFrom((context.ContextOuterClass.Device)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.Device other) {
-        if (other == context.ContextOuterClass.Device.getDefaultInstance()) return this;
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
-        }
-        if (!other.getDeviceType().isEmpty()) {
-          deviceType_ = other.deviceType_;
-          onChanged();
-        }
-        if (other.hasDeviceConfig()) {
-          mergeDeviceConfig(other.getDeviceConfig());
-        }
-        if (other.deviceOperationalStatus_ != 0) {
-          setDeviceOperationalStatusValue(other.getDeviceOperationalStatusValue());
-        }
-        if (!other.deviceDrivers_.isEmpty()) {
-          if (deviceDrivers_.isEmpty()) {
-            deviceDrivers_ = other.deviceDrivers_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureDeviceDriversIsMutable();
-            deviceDrivers_.addAll(other.deviceDrivers_);
-          }
-          onChanged();
-        }
-        if (deviceEndpointsBuilder_ == null) {
-          if (!other.deviceEndpoints_.isEmpty()) {
-            if (deviceEndpoints_.isEmpty()) {
-              deviceEndpoints_ = other.deviceEndpoints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureDeviceEndpointsIsMutable();
-              deviceEndpoints_.addAll(other.deviceEndpoints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.deviceEndpoints_.isEmpty()) {
-            if (deviceEndpointsBuilder_.isEmpty()) {
-              deviceEndpointsBuilder_.dispose();
-              deviceEndpointsBuilder_ = null;
-              deviceEndpoints_ = other.deviceEndpoints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              deviceEndpointsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceEndpointsFieldBuilder() : null;
-            } else {
-              deviceEndpointsBuilder_.addAllMessages(other.deviceEndpoints_);
-            }
-          }
-        }
-        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.Device parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Device) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      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 = 1;</code>
-       * @return Whether the deviceId field is set.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.DeviceId device_id = 1;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceId device_id = 1;</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 = 1;</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_;
+     * Protobuf type {@code context.ServiceIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ServiceIdList)
+        context.ContextOuterClass.ServiceIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
       }
 
-      private java.lang.Object deviceType_ = "";
-      /**
-       * <code>string device_type = 2;</code>
-       * @return The deviceType.
-       */
-      public java.lang.String getDeviceType() {
-        java.lang.Object ref = deviceType_;
-        if (!(ref instanceof java.lang.String)) {
-          com.google.protobuf.ByteString bs =
-              (com.google.protobuf.ByteString) ref;
-          java.lang.String s = bs.toStringUtf8();
-          deviceType_ = s;
-          return s;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string device_type = 2;</code>
-       * @return The bytes for deviceType.
-       */
-      public com.google.protobuf.ByteString
-          getDeviceTypeBytes() {
-        java.lang.Object ref = deviceType_;
-        if (ref instanceof String) {
-          com.google.protobuf.ByteString b = 
-              com.google.protobuf.ByteString.copyFromUtf8(
-                  (java.lang.String) ref);
-          deviceType_ = b;
-          return b;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string device_type = 2;</code>
-       * @param value The deviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        deviceType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string device_type = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceType() {
-        
-        deviceType_ = getDefaultInstance().getDeviceType();
-        onChanged();
-        return this;
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
       }
-      /**
-       * <code>string device_type = 2;</code>
-       * @param value The bytes for deviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        deviceType_ = value;
-        onChanged();
-        return this;
+
+      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
 
-      private context.ContextOuterClass.DeviceConfig deviceConfig_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> deviceConfigBuilder_;
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return Whether the deviceConfig field is set.
-       */
-      public boolean hasDeviceConfig() {
-        return deviceConfigBuilder_ != null || deviceConfig_ != null;
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       * @return The deviceConfig.
-       */
-      public context.ContextOuterClass.DeviceConfig getDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          return deviceConfig_ == null ? context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        } else {
-          return deviceConfigBuilder_.getMessage();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getServiceIdsFieldBuilder();
         }
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceConfig_ = value;
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          deviceConfigBuilder_.setMessage(value);
+          serviceIdsBuilder_.clear();
         }
-
         return this;
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder setDeviceConfig(
-          context.ContextOuterClass.DeviceConfig.Builder builderForValue) {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceConfigBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder mergeDeviceConfig(context.ContextOuterClass.DeviceConfig value) {
-        if (deviceConfigBuilder_ == null) {
-          if (deviceConfig_ != null) {
-            deviceConfig_ =
-              context.ContextOuterClass.DeviceConfig.newBuilder(deviceConfig_).mergeFrom(value).buildPartial();
-          } else {
-            deviceConfig_ = value;
-          }
-          onChanged();
-        } else {
-          deviceConfigBuilder_.mergeFrom(value);
-        }
 
-        return this;
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
       }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public Builder clearDeviceConfig() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfig_ = null;
-          onChanged();
-        } else {
-          deviceConfig_ = null;
-          deviceConfigBuilder_ = null;
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceConfig.Builder getDeviceConfigBuilder() {
-        
-        onChanged();
-        return getDeviceConfigFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      public context.ContextOuterClass.DeviceConfigOrBuilder getDeviceConfigOrBuilder() {
-        if (deviceConfigBuilder_ != null) {
-          return deviceConfigBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceConfig_ == null ?
-              context.ContextOuterClass.DeviceConfig.getDefaultInstance() : deviceConfig_;
-        }
-      }
-      /**
-       * <code>.context.DeviceConfig device_config = 3;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder> 
-          getDeviceConfigFieldBuilder() {
-        if (deviceConfigBuilder_ == null) {
-          deviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.DeviceConfig, context.ContextOuterClass.DeviceConfig.Builder, context.ContextOuterClass.DeviceConfigOrBuilder>(
-                  getDeviceConfig(),
-                  getParentForChildren(),
-                  isClean());
-          deviceConfig_ = null;
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList build() {
+        context.ContextOuterClass.ServiceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return deviceConfigBuilder_;
+        return result;
       }
 
-      private int deviceOperationalStatus_ = 0;
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return The enum numeric value on the wire for deviceOperationalStatus.
-       */
-      @java.lang.Override public int getDeviceOperationalStatusValue() {
-        return deviceOperationalStatus_;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @param value The enum numeric value on the wire for deviceOperationalStatus to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceOperationalStatusValue(int value) {
-        
-        deviceOperationalStatus_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return The deviceOperationalStatus.
-       */
       @java.lang.Override
-      public context.ContextOuterClass.DeviceOperationalStatusEnum getDeviceOperationalStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.DeviceOperationalStatusEnum result = context.ContextOuterClass.DeviceOperationalStatusEnum.valueOf(deviceOperationalStatus_);
-        return result == null ? context.ContextOuterClass.DeviceOperationalStatusEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @param value The deviceOperationalStatus to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceOperationalStatus(context.ContextOuterClass.DeviceOperationalStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public context.ContextOuterClass.ServiceIdList buildPartial() {
+        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (serviceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.serviceIds_ = serviceIds_;
+        } else {
+          result.serviceIds_ = serviceIdsBuilder_.build();
         }
-        
-        deviceOperationalStatus_ = value.getNumber();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.DeviceOperationalStatusEnum device_operational_status = 4;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceOperationalStatus() {
-        
-        deviceOperationalStatus_ = 0;
-        onChanged();
-        return this;
+        onBuilt();
+        return result;
       }
 
-      private java.util.List<java.lang.Integer> deviceDrivers_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceDriversIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceDrivers_ = new java.util.ArrayList<java.lang.Integer>(deviceDrivers_);
-          bitField0_ |= 0x00000001;
-        }
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return A list containing the deviceDrivers.
-       */
-      public java.util.List<context.ContextOuterClass.DeviceDriverEnum> getDeviceDriversList() {
-        return new com.google.protobuf.Internal.ListAdapter<
-            java.lang.Integer, context.ContextOuterClass.DeviceDriverEnum>(deviceDrivers_, deviceDrivers_converter_);
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return The count of deviceDrivers.
-       */
-      public int getDeviceDriversCount() {
-        return deviceDrivers_.size();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the element to return.
-       * @return The deviceDrivers at the given index.
-       */
-      public context.ContextOuterClass.DeviceDriverEnum getDeviceDrivers(int index) {
-        return deviceDrivers_converter_.convert(deviceDrivers_.get(index));
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index to set the value at.
-       * @param value The deviceDrivers to set.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceDrivers(
-          int index, context.ContextOuterClass.DeviceDriverEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.set(index, value.getNumber());
-        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);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param value The deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addDeviceDrivers(context.ContextOuterClass.DeviceDriverEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.add(value.getNumber());
-        onChanged();
-        return this;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param values The deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllDeviceDrivers(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceDriverEnum> values) {
-        ensureDeviceDriversIsMutable();
-        for (context.ContextOuterClass.DeviceDriverEnum value : values) {
-          deviceDrivers_.add(value.getNumber());
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ServiceIdList) {
+          return mergeFrom((context.ContextOuterClass.ServiceIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
         }
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearDeviceDrivers() {
-        deviceDrivers_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @return A list containing the enum numeric values on the wire for deviceDrivers.
-       */
-      public java.util.List<java.lang.Integer>
-      getDeviceDriversValueList() {
-        return java.util.Collections.unmodifiableList(deviceDrivers_);
-      }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of deviceDrivers at the given index.
-       */
-      public int getDeviceDriversValue(int index) {
-        return deviceDrivers_.get(index);
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param index The index of the value to return.
-       * @return The enum numeric value on the wire of deviceDrivers at the given index.
-       * @return This builder for chaining.
-       */
-      public Builder setDeviceDriversValue(
-          int index, int value) {
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.set(index, value);
+
+      public Builder mergeFrom(context.ContextOuterClass.ServiceIdList other) {
+        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
+        if (serviceIdsBuilder_ == null) {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIds_.isEmpty()) {
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureServiceIdsIsMutable();
+              serviceIds_.addAll(other.serviceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.serviceIds_.isEmpty()) {
+            if (serviceIdsBuilder_.isEmpty()) {
+              serviceIdsBuilder_.dispose();
+              serviceIdsBuilder_ = null;
+              serviceIds_ = other.serviceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              serviceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getServiceIdsFieldBuilder() : null;
+            } else {
+              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param value The enum numeric value on the wire for deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addDeviceDriversValue(int value) {
-        ensureDeviceDriversIsMutable();
-        deviceDrivers_.add(value);
-        onChanged();
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>repeated .context.DeviceDriverEnum device_drivers = 5;</code>
-       * @param values The enum numeric values on the wire for deviceDrivers to add.
-       * @return This builder for chaining.
-       */
-      public Builder addAllDeviceDriversValue(
-          java.lang.Iterable<java.lang.Integer> values) {
-        ensureDeviceDriversIsMutable();
-        for (int value : values) {
-          deviceDrivers_.add(value);
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ServiceIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        onChanged();
         return this;
       }
+      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.EndPoint> deviceEndpoints_ =
+      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
         java.util.Collections.emptyList();
-      private void ensureDeviceEndpointsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          deviceEndpoints_ = new java.util.ArrayList<context.ContextOuterClass.EndPoint>(deviceEndpoints_);
-          bitField0_ |= 0x00000002;
+      private void ensureServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
+          bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> deviceEndpointsBuilder_;
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
 
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPoint> getDeviceEndpointsList() {
-        if (deviceEndpointsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+        if (serviceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(serviceIds_);
         } else {
-          return deviceEndpointsBuilder_.getMessageList();
+          return serviceIdsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public int getDeviceEndpointsCount() {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.size();
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
         } else {
-          return deviceEndpointsBuilder_.getCount();
+          return serviceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPoint getDeviceEndpoints(int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.get(index);
+      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);
         } else {
-          return deviceEndpointsBuilder_.getMessage(index);
+          return serviceIdsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder setDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.set(index, value);
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, value);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.setMessage(index, value);
+          serviceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder setDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.set(index, builderForValue.build());
+      public Builder setServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          deviceEndpointsBuilder_.setMessage(index, builderForValue.build());
+          serviceIdsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder addDeviceEndpoints(context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
+      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(value);
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(value);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addMessage(value);
+          serviceIdsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder addDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint value) {
-        if (deviceEndpointsBuilder_ == null) {
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (serviceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(index, value);
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, value);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addMessage(index, value);
+          serviceIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder addDeviceEndpoints(
-          context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(builderForValue.build());
+      public Builder addServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addMessage(builderForValue.build());
+          serviceIdsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder addDeviceEndpoints(
-          int index, context.ContextOuterClass.EndPoint.Builder builderForValue) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.add(index, builderForValue.build());
+      public Builder addServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addMessage(index, builderForValue.build());
+          serviceIdsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder addAllDeviceEndpoints(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPoint> values) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
+      public Builder addAllServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceEndpoints_);
+              values, serviceIds_);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.addAllMessages(values);
+          serviceIdsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder clearDeviceEndpoints() {
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpoints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.clear();
+          serviceIdsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public Builder removeDeviceEndpoints(int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          ensureDeviceEndpointsIsMutable();
-          deviceEndpoints_.remove(index);
+      public Builder removeServiceIds(int index) {
+        if (serviceIdsBuilder_ == null) {
+          ensureServiceIdsIsMutable();
+          serviceIds_.remove(index);
           onChanged();
         } else {
-          deviceEndpointsBuilder_.remove(index);
+          serviceIdsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPoint.Builder getDeviceEndpointsBuilder(
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
           int index) {
-        return getDeviceEndpointsFieldBuilder().getBuilder(index);
+        return getServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPointOrBuilder getDeviceEndpointsOrBuilder(
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
           int index) {
-        if (deviceEndpointsBuilder_ == null) {
-          return deviceEndpoints_.get(index);  } else {
-          return deviceEndpointsBuilder_.getMessageOrBuilder(index);
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.get(index);  } else {
+          return serviceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointOrBuilder> 
-           getDeviceEndpointsOrBuilderList() {
-        if (deviceEndpointsBuilder_ != null) {
-          return deviceEndpointsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getServiceIdsOrBuilderList() {
+        if (serviceIdsBuilder_ != null) {
+          return serviceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(deviceEndpoints_);
+          return java.util.Collections.unmodifiableList(serviceIds_);
         }
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder() {
-        return getDeviceEndpointsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPoint.getDefaultInstance());
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public context.ContextOuterClass.EndPoint.Builder addDeviceEndpointsBuilder(
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
           int index) {
-        return getDeviceEndpointsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPoint.getDefaultInstance());
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.EndPoint device_endpoints = 6;</code>
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPoint.Builder> 
-           getDeviceEndpointsBuilderList() {
-        return getDeviceEndpointsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getServiceIdsBuilderList() {
+        return getServiceIdsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder> 
-          getDeviceEndpointsFieldBuilder() {
-        if (deviceEndpointsBuilder_ == null) {
-          deviceEndpointsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPoint, context.ContextOuterClass.EndPoint.Builder, context.ContextOuterClass.EndPointOrBuilder>(
-                  deviceEndpoints_,
-                  ((bitField0_ & 0x00000002) != 0),
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdsFieldBuilder() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  serviceIds_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          deviceEndpoints_ = null;
+          serviceIds_ = null;
         }
-        return deviceEndpointsBuilder_;
+        return serviceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -14069,95 +27144,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Device)
+      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Device)
-    private static final context.ContextOuterClass.Device DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
+    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Device();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
     }
 
-    public static context.ContextOuterClass.Device getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Device>
-        PARSER = new com.google.protobuf.AbstractParser<Device>() {
+    private static final com.google.protobuf.Parser<ServiceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
       @java.lang.Override
-      public Device parsePartialFrom(
+      public ServiceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Device(input, extensionRegistry);
+        return new ServiceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Device> parser() {
+    public static com.google.protobuf.Parser<ServiceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Device> getParserForType() {
+    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Device getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceConfig)
+  public interface ServiceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
+    java.util.List<context.ContextOuterClass.Service> 
+        getServicesList();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    context.ContextOuterClass.Service getServices(int index);
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
-    int getConfigRulesCount();
+    int getServicesCount();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code context.DeviceConfig}
+   * Protobuf type {@code context.ServiceList}
    */
-  public static final class DeviceConfig extends
+  public static final class ServiceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceConfig)
-      DeviceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceList)
+      ServiceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceConfig.newBuilder() to construct.
-    private DeviceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceList.newBuilder() to construct.
+    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private ServiceList() {
+      services_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceConfig();
+      return new ServiceList();
     }
 
     @java.lang.Override
@@ -14165,7 +27240,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceConfig(
+    private ServiceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -14186,11 +27261,11 @@ public final class ContextOuterClass {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
+                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              services_.add(
+                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -14209,7 +27284,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
+          services_ = java.util.Collections.unmodifiableList(services_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -14217,55 +27292,55 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int SERVICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Service> services_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
+    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+      return services_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList() {
+      return services_;
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    public int getServicesCount() {
+      return services_.size();
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    public context.ContextOuterClass.Service getServices(int index) {
+      return services_.get(index);
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>repeated .context.Service services = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
         int index) {
-      return configRules_.get(index);
+      return services_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -14282,8 +27357,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 < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      for (int i = 0; i < services_.size(); i++) {
+        output.writeMessage(1, services_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -14294,9 +27369,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      for (int i = 0; i < services_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, configRules_.get(i));
+          .computeMessageSize(1, services_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -14308,13 +27383,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceConfig other = (context.ContextOuterClass.DeviceConfig) obj;
+      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
 
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      if (!getServicesList()
+          .equals(other.getServicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -14326,78 +27401,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().hashCode();
+      if (getServicesCount() > 0) {
+        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
+        hash = (53 * hash) + getServicesList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList 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.DeviceConfig parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceList parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList 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.DeviceConfig parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceList parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceList 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.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceConfig parseFrom(
+    public static context.ContextOuterClass.ServiceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -14410,7 +27485,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -14426,26 +27501,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceConfig}
+     * Protobuf type {@code context.ServiceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceConfig)
-        context.ContextOuterClass.DeviceConfigOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceList)
+        context.ContextOuterClass.ServiceListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceConfig.class, context.ContextOuterClass.DeviceConfig.Builder.class);
+                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -14458,17 +27533,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
+          getServicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          configRulesBuilder_.clear();
+          servicesBuilder_.clear();
         }
         return this;
       }
@@ -14476,17 +27551,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceConfig.getDefaultInstance();
+      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig build() {
-        context.ContextOuterClass.DeviceConfig result = buildPartial();
+      public context.ContextOuterClass.ServiceList build() {
+        context.ContextOuterClass.ServiceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -14494,17 +27569,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceConfig buildPartial() {
-        context.ContextOuterClass.DeviceConfig result = new context.ContextOuterClass.DeviceConfig(this);
+      public context.ContextOuterClass.ServiceList buildPartial() {
+        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
         int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
+        if (servicesBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
+            services_ = java.util.Collections.unmodifiableList(services_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.configRules_ = configRules_;
+          result.services_ = services_;
         } else {
-          result.configRules_ = configRulesBuilder_.build();
+          result.services_ = servicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -14544,39 +27619,39 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceConfig) {
-          return mergeFrom((context.ContextOuterClass.DeviceConfig)other);
+        if (other instanceof context.ContextOuterClass.ServiceList) {
+          return mergeFrom((context.ContextOuterClass.ServiceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceConfig other) {
-        if (other == context.ContextOuterClass.DeviceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
+      public Builder mergeFrom(context.ContextOuterClass.ServiceList other) {
+        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
+        if (servicesBuilder_ == null) {
+          if (!other.services_.isEmpty()) {
+            if (services_.isEmpty()) {
+              services_ = other.services_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
+              ensureServicesIsMutable();
+              services_.addAll(other.services_);
             }
             onChanged();
           }
         } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
+          if (!other.services_.isEmpty()) {
+            if (servicesBuilder_.isEmpty()) {
+              servicesBuilder_.dispose();
+              servicesBuilder_ = null;
+              services_ = other.services_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
+              servicesBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
+                   getServicesFieldBuilder() : null;
             } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
+              servicesBuilder_.addAllMessages(other.services_);
             }
           }
         }
@@ -14595,11 +27670,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceConfig parsedMessage = null;
+        context.ContextOuterClass.ServiceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceConfig) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -14610,244 +27685,244 @@ public final class ContextOuterClass {
       }
       private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
+      private java.util.List<context.ContextOuterClass.Service> services_ =
         java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
+      private void ensureServicesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
+          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
 
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
+      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
+        if (servicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(services_);
         } else {
-          return configRulesBuilder_.getMessageList();
+          return servicesBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
+      public int getServicesCount() {
+        if (servicesBuilder_ == null) {
+          return services_.size();
         } else {
-          return configRulesBuilder_.getCount();
+          return servicesBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
+      public context.ContextOuterClass.Service getServices(int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);
         } else {
-          return configRulesBuilder_.getMessage(index);
+          return servicesBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
-       */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
+          ensureServicesIsMutable();
+          services_.set(index, value);
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, value);
+          servicesBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
+      public Builder setServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.set(index, builderForValue.build());
           onChanged();
         } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
+          servicesBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder addServices(context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
+          ensureServicesIsMutable();
+          services_.add(value);
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(value);
+          servicesBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service value) {
+        if (servicesBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
+          ensureServicesIsMutable();
+          services_.add(index, value);
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, value);
+          servicesBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
+      public Builder addServices(
+          context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(builderForValue.build());
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
+          servicesBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
+      public Builder addServices(
+          int index, context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(index, builderForValue.build());
           onChanged();
         } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
+          servicesBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
+      public Builder addAllServices(
+          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
+              values, services_);
           onChanged();
         } else {
-          configRulesBuilder_.addAllMessages(values);
+          servicesBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
+      public Builder clearServices() {
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          configRulesBuilder_.clear();
+          servicesBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
+      public Builder removeServices(int index) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.remove(index);
           onChanged();
         } else {
-          configRulesBuilder_.remove(index);
+          servicesBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
+      public context.ContextOuterClass.Service.Builder getServicesBuilder(
           int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
+        return getServicesFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
+      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
           int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
+        if (servicesBuilder_ == null) {
+          return services_.get(index);  } else {
+          return servicesBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+           getServicesOrBuilderList() {
+        if (servicesBuilder_ != null) {
+          return servicesBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(configRules_);
+          return java.util.Collections.unmodifiableList(services_);
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
+        return getServicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Service.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
+      public context.ContextOuterClass.Service.Builder addServicesBuilder(
           int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+        return getServicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Service.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>repeated .context.Service services = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Service.Builder> 
+           getServicesBuilderList() {
+        return getServicesFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          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_,
+          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
+          getServicesFieldBuilder() {
+        if (servicesBuilder_ == null) {
+          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
+                  services_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          configRules_ = null;
+          services_ = null;
         }
-        return configRulesBuilder_;
+        return servicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -14862,95 +27937,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceConfig)
+      // @@protoc_insertion_point(builder_scope:context.ServiceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceConfig)
-    private static final context.ContextOuterClass.DeviceConfig DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceList)
+    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceConfig();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
     }
 
-    public static context.ContextOuterClass.DeviceConfig getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceConfig>() {
+    private static final com.google.protobuf.Parser<ServiceList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
       @java.lang.Override
-      public DeviceConfig parsePartialFrom(
+      public ServiceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceConfig(input, extensionRegistry);
+        return new ServiceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceConfig> parser() {
+    public static com.google.protobuf.Parser<ServiceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceConfig> getParserForType() {
+    public com.google.protobuf.Parser<ServiceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceConfig getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceIdList)
+  public interface ServiceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    java.util.List<context.ContextOuterClass.DeviceId> 
-        getDeviceIdsList();
+    boolean hasEvent();
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.DeviceId getDeviceIds(int index);
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    int getDeviceIdsCount();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList();
+    boolean hasServiceId();
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index);
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.DeviceIdList}
+   * Protobuf type {@code context.ServiceEvent}
    */
-  public static final class DeviceIdList extends
+  public static final class ServiceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceIdList)
-      DeviceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
+      ServiceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceIdList.newBuilder() to construct.
-    private DeviceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ServiceEvent.newBuilder() to construct.
+    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceIdList() {
-      deviceIds_ = java.util.Collections.emptyList();
+    private ServiceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceIdList();
+      return new ServiceEvent();
     }
 
     @java.lang.Override
@@ -14958,7 +28038,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceIdList(
+    private ServiceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -14966,7 +28046,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 {
@@ -14978,12 +28057,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              deviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry));
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(event_);
+                event_ = 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;
             }
             default: {
@@ -15001,64 +28097,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
     }
 
-    public static final int DEVICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-      return deviceIds_;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-        getDeviceIdsOrBuilderList() {
-      return deviceIds_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public int getDeviceIdsCount() {
-      return deviceIds_.size();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-      return deviceIds_.get(index);
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>repeated .context.DeviceId device_ids = 1;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-        int index) {
-      return deviceIds_.get(index);
+    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();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -15075,8 +28180,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 < deviceIds_.size(); i++) {
-        output.writeMessage(1, deviceIds_.get(i));
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
       }
       unknownFields.writeTo(output);
     }
@@ -15087,9 +28195,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < deviceIds_.size(); i++) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, deviceIds_.get(i));
+          .computeMessageSize(1, getEvent());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -15101,13 +28213,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceIdList other = (context.ContextOuterClass.DeviceIdList) obj;
+      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
 
-      if (!getDeviceIdsList()
-          .equals(other.getDeviceIdsList())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
+      }
+      if (hasServiceId() != other.hasServiceId()) return false;
+      if (hasServiceId()) {
+        if (!getServiceId()
+            .equals(other.getServiceId())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -15119,78 +28239,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getDeviceIdsCount() > 0) {
-        hash = (37 * hash) + DEVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceIdsList().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
+      }
+      if (hasServiceId()) {
+        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getServiceId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent 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.DeviceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.ServiceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceEvent parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent 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.DeviceIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.ServiceEvent 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.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceIdList parseFrom(
+    public static context.ContextOuterClass.ServiceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -15203,7 +28327,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -15219,26 +28343,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceIdList}
+     * Protobuf type {@code context.ServiceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceIdList)
-        context.ContextOuterClass.DeviceIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
+        context.ContextOuterClass.ServiceEventOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceIdList.class, context.ContextOuterClass.DeviceIdList.Builder.class);
+                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -15251,17 +28375,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDeviceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          deviceIdsBuilder_.clear();
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
         return this;
       }
@@ -15269,17 +28398,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceIdList.getDefaultInstance();
+      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList build() {
-        context.ContextOuterClass.DeviceIdList result = buildPartial();
+      public context.ContextOuterClass.ServiceEvent build() {
+        context.ContextOuterClass.ServiceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -15287,17 +28416,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceIdList buildPartial() {
-        context.ContextOuterClass.DeviceIdList result = new context.ContextOuterClass.DeviceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (deviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            deviceIds_ = java.util.Collections.unmodifiableList(deviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.deviceIds_ = deviceIds_;
+      public context.ContextOuterClass.ServiceEvent buildPartial() {
+        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.deviceIds_ = deviceIdsBuilder_.build();
+          result.event_ = eventBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -15337,41 +28466,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceIdList) {
-          return mergeFrom((context.ContextOuterClass.DeviceIdList)other);
+        if (other instanceof context.ContextOuterClass.ServiceEvent) {
+          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceIdList other) {
-        if (other == context.ContextOuterClass.DeviceIdList.getDefaultInstance()) return this;
-        if (deviceIdsBuilder_ == null) {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIds_.isEmpty()) {
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDeviceIdsIsMutable();
-              deviceIds_.addAll(other.deviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.deviceIds_.isEmpty()) {
-            if (deviceIdsBuilder_.isEmpty()) {
-              deviceIdsBuilder_.dispose();
-              deviceIdsBuilder_ = null;
-              deviceIds_ = other.deviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              deviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDeviceIdsFieldBuilder() : null;
-            } else {
-              deviceIdsBuilder_.addAllMessages(other.deviceIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
+        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -15388,11 +28497,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceIdList parsedMessage = null;
+        context.ContextOuterClass.ServiceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -15401,246 +28510,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.DeviceId> deviceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureDeviceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          deviceIds_ = new java.util.ArrayList<context.ContextOuterClass.DeviceId>(deviceIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdsBuilder_;
 
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.DeviceId> getDeviceIdsList() {
-        if (deviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(deviceIds_);
-        } else {
-          return deviceIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public int getDeviceIdsCount() {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.size();
-        } else {
-          return deviceIdsBuilder_.getCount();
-        }
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.DeviceId getDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return deviceIdsBuilder_.getMessage(index);
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, value);
+          event_ = value;
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, value);
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.set(index, builderForValue.build());
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          deviceIdsBuilder_.setMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addDeviceIds(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == 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;
           }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(value);
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(value);
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId value) {
-        if (deviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, value);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          deviceIdsBuilder_.addMessage(index, value);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addDeviceIds(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.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 {
-          deviceIdsBuilder_.addMessage(builderForValue.build());
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addDeviceIds(
-          int index, context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          deviceIdsBuilder_.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.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>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
        */
-      public Builder addAllDeviceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.DeviceId> values) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, deviceIds_);
-          onChanged();
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
         } else {
-          deviceIdsBuilder_.addAllMessages(values);
+          return serviceIdBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder clearDeviceIds() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
           onChanged();
         } else {
-          deviceIdsBuilder_.clear();
+          serviceIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public Builder removeDeviceIds(int index) {
-        if (deviceIdsBuilder_ == null) {
-          ensureDeviceIdsIsMutable();
-          deviceIds_.remove(index);
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
           onChanged();
         } else {
-          deviceIdsBuilder_.remove(index);
+          serviceIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdsBuilder(
-          int index) {
-        return getDeviceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdsOrBuilder(
-          int index) {
-        if (deviceIdsBuilder_ == null) {
-          return deviceIds_.get(index);  } else {
-          return deviceIdsBuilder_.getMessageOrBuilder(index);
+      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>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.DeviceIdOrBuilder> 
-           getDeviceIdsOrBuilderList() {
-        if (deviceIdsBuilder_ != null) {
-          return deviceIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(deviceIds_);
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder() {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.DeviceId.getDefaultInstance());
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder addDeviceIdsBuilder(
-          int index) {
-        return getDeviceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.DeviceId.getDefaultInstance());
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
       }
       /**
-       * <code>repeated .context.DeviceId device_ids = 1;</code>
+       * <code>.context.ServiceId service_id = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.DeviceId.Builder> 
-           getDeviceIdsBuilderList() {
-        return getDeviceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
-          getDeviceIdsFieldBuilder() {
-        if (deviceIdsBuilder_ == null) {
-          deviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
-                  deviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      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());
-          deviceIds_ = null;
+          serviceId_ = null;
         }
-        return deviceIdsBuilder_;
+        return serviceIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -15655,95 +28761,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceIdList)
+      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceIdList)
-    private static final context.ContextOuterClass.DeviceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
+    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
     }
 
-    public static context.ContextOuterClass.DeviceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceIdList>() {
+    private static final com.google.protobuf.Parser<ServiceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
       @java.lang.Override
-      public DeviceIdList parsePartialFrom(
+      public ServiceEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceIdList(input, extensionRegistry);
+        return new ServiceEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceIdList> parser() {
+    public static com.google.protobuf.Parser<ServiceEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceIdList> getParserForType() {
+    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface DeviceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceList)
+  public interface SliceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
      */
-    java.util.List<context.ContextOuterClass.Device> 
-        getDevicesList();
+    boolean hasContextId();
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
      */
-    context.ContextOuterClass.Device getDevices(int index);
+    context.ContextOuterClass.ContextId getContextId();
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
      */
-    int getDevicesCount();
+    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return Whether the sliceUuid field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-        getDevicesOrBuilderList();
+    boolean hasSliceUuid();
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return The sliceUuid.
      */
-    context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-        int index);
+    context.ContextOuterClass.Uuid getSliceUuid();
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.DeviceList}
+   * <pre>
+   * ----- Slice ---------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.SliceId}
    */
-  public static final class DeviceList extends
+  public static final class SliceId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceList)
-      DeviceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceId)
+      SliceIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceList.newBuilder() to construct.
-    private DeviceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceId.newBuilder() to construct.
+    private SliceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceList() {
-      devices_ = java.util.Collections.emptyList();
+    private SliceId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceList();
+      return new SliceId();
     }
 
     @java.lang.Override
@@ -15751,7 +28866,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceList(
+    private SliceId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -15759,7 +28874,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 {
@@ -15771,12 +28885,29 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.ContextId.Builder subBuilder = null;
+              if (contextId_ != null) {
+                subBuilder = contextId_.toBuilder();
               }
-              devices_.add(
-                  input.readMessage(context.ContextOuterClass.Device.parser(), extensionRegistry));
+              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextId_);
+                contextId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (sliceUuid_ != null) {
+                subBuilder = sliceUuid_.toBuilder();
+              }
+              sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceUuid_);
+                sliceUuid_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -15794,64 +28925,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          devices_ = java.util.Collections.unmodifiableList(devices_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+              context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
     }
 
-    public static final int DEVICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Device> devices_;
+    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ContextId contextId_;
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return Whether the contextId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
-      return devices_;
+    public boolean hasContextId() {
+      return contextId_ != null;
     }
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
+     * @return The contextId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-        getDevicesOrBuilderList() {
-      return devices_;
+    public context.ContextOuterClass.ContextId getContextId() {
+      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
     }
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.ContextId context_id = 1;</code>
      */
     @java.lang.Override
-    public int getDevicesCount() {
-      return devices_.size();
+    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+      return getContextId();
     }
+
+    public static final int SLICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid sliceUuid_;
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return Whether the sliceUuid field is set.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Device getDevices(int index) {
-      return devices_.get(index);
+    public boolean hasSliceUuid() {
+      return sliceUuid_ != null;
     }
     /**
-     * <code>repeated .context.Device devices = 1;</code>
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     * @return The sliceUuid.
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-        int index) {
-      return devices_.get(index);
+    public context.ContextOuterClass.Uuid getSliceUuid() {
+      return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+    }
+    /**
+     * <code>.context.Uuid slice_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
+      return getSliceUuid();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -15868,8 +29008,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 < devices_.size(); i++) {
-        output.writeMessage(1, devices_.get(i));
+      if (contextId_ != null) {
+        output.writeMessage(1, getContextId());
+      }
+      if (sliceUuid_ != null) {
+        output.writeMessage(2, getSliceUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -15880,9 +29023,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < devices_.size(); i++) {
+      if (contextId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, devices_.get(i));
+          .computeMessageSize(1, getContextId());
+      }
+      if (sliceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getSliceUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -15894,13 +29041,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.DeviceList other = (context.ContextOuterClass.DeviceList) obj;
+      context.ContextOuterClass.SliceId other = (context.ContextOuterClass.SliceId) obj;
 
-      if (!getDevicesList()
-          .equals(other.getDevicesList())) return false;
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (hasSliceUuid() != other.hasSliceUuid()) return false;
+      if (hasSliceUuid()) {
+        if (!getSliceUuid()
+            .equals(other.getSliceUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -15912,78 +29067,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getDevicesCount() > 0) {
-        hash = (37 * hash) + DEVICES_FIELD_NUMBER;
-        hash = (53 * hash) + getDevicesList().hashCode();
+      if (hasContextId()) {
+        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getContextId().hashCode();
+      }
+      if (hasSliceUuid()) {
+        hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceUuid().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId 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.DeviceList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceId parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId 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.DeviceList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceId parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceId 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.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceList parseFrom(
+    public static context.ContextOuterClass.SliceId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -15996,7 +29155,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -16012,26 +29171,30 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceList}
+     * <pre>
+     * ----- Slice ---------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.SliceId}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceList)
-        context.ContextOuterClass.DeviceListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceId)
+        context.ContextOuterClass.SliceIdOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceList.class, context.ContextOuterClass.DeviceList.Builder.class);
+                context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceId.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -16044,17 +29207,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getDevicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (devicesBuilder_ == null) {
-          devices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
         } else {
-          devicesBuilder_.clear();
+          contextId_ = null;
+          contextIdBuilder_ = null;
+        }
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = null;
+        } else {
+          sliceUuid_ = null;
+          sliceUuidBuilder_ = null;
         }
         return this;
       }
@@ -16062,17 +29230,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceList.getDefaultInstance();
+      public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceId.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceList build() {
-        context.ContextOuterClass.DeviceList result = buildPartial();
+      public context.ContextOuterClass.SliceId build() {
+        context.ContextOuterClass.SliceId result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -16080,17 +29248,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceList buildPartial() {
-        context.ContextOuterClass.DeviceList result = new context.ContextOuterClass.DeviceList(this);
-        int from_bitField0_ = bitField0_;
-        if (devicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            devices_ = java.util.Collections.unmodifiableList(devices_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.devices_ = devices_;
+      public context.ContextOuterClass.SliceId buildPartial() {
+        context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
         } else {
-          result.devices_ = devicesBuilder_.build();
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        if (sliceUuidBuilder_ == null) {
+          result.sliceUuid_ = sliceUuid_;
+        } else {
+          result.sliceUuid_ = sliceUuidBuilder_.build();
         }
         onBuilt();
         return result;
@@ -16130,41 +29298,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceList) {
-          return mergeFrom((context.ContextOuterClass.DeviceList)other);
+        if (other instanceof context.ContextOuterClass.SliceId) {
+          return mergeFrom((context.ContextOuterClass.SliceId)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceList other) {
-        if (other == context.ContextOuterClass.DeviceList.getDefaultInstance()) return this;
-        if (devicesBuilder_ == null) {
-          if (!other.devices_.isEmpty()) {
-            if (devices_.isEmpty()) {
-              devices_ = other.devices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureDevicesIsMutable();
-              devices_.addAll(other.devices_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.devices_.isEmpty()) {
-            if (devicesBuilder_.isEmpty()) {
-              devicesBuilder_.dispose();
-              devicesBuilder_ = null;
-              devices_ = other.devices_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              devicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getDevicesFieldBuilder() : null;
-            } else {
-              devicesBuilder_.addAllMessages(other.devices_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.SliceId other) {
+        if (other == context.ContextOuterClass.SliceId.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.hasSliceUuid()) {
+          mergeSliceUuid(other.getSliceUuid());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -16181,11 +29329,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceList parsedMessage = null;
+        context.ContextOuterClass.SliceId parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -16194,246 +29342,243 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Device> devices_ =
-        java.util.Collections.emptyList();
-      private void ensureDevicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          devices_ = new java.util.ArrayList<context.ContextOuterClass.Device>(devices_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> devicesBuilder_;
 
+      private context.ContextOuterClass.ContextId contextId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Device> getDevicesList() {
-        if (devicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(devices_);
-        } else {
-          return devicesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return Whether the contextId field is set.
        */
-      public int getDevicesCount() {
-        if (devicesBuilder_ == null) {
-          return devices_.size();
-        } else {
-          return devicesBuilder_.getCount();
-        }
+      public boolean hasContextId() {
+        return contextIdBuilder_ != null || contextId_ != null;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
+       * @return The contextId.
        */
-      public context.ContextOuterClass.Device getDevices(int index) {
-        if (devicesBuilder_ == null) {
-          return devices_.get(index);
+      public context.ContextOuterClass.ContextId getContextId() {
+        if (contextIdBuilder_ == null) {
+          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         } else {
-          return devicesBuilder_.getMessage(index);
+          return contextIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setDevices(
-          int index, context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
+      public Builder setContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureDevicesIsMutable();
-          devices_.set(index, value);
+          contextId_ = value;
           onChanged();
         } else {
-          devicesBuilder_.setMessage(index, value);
+          contextIdBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder setDevices(
-          int index, context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.set(index, builderForValue.build());
+      public Builder setContextId(
+          context.ContextOuterClass.ContextId.Builder builderForValue) {
+        if (contextIdBuilder_ == null) {
+          contextId_ = builderForValue.build();
           onChanged();
         } else {
-          devicesBuilder_.setMessage(index, builderForValue.build());
+          contextIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDevices(context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
+        if (contextIdBuilder_ == null) {
+          if (contextId_ != null) {
+            contextId_ =
+              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
+          } else {
+            contextId_ = value;
           }
-          ensureDevicesIsMutable();
-          devices_.add(value);
           onChanged();
         } else {
-          devicesBuilder_.addMessage(value);
+          contextIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDevices(
-          int index, context.ContextOuterClass.Device value) {
-        if (devicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureDevicesIsMutable();
-          devices_.add(index, value);
+      public Builder clearContextId() {
+        if (contextIdBuilder_ == null) {
+          contextId_ = null;
           onChanged();
         } else {
-          devicesBuilder_.addMessage(index, value);
+          contextId_ = null;
+          contextIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDevices(
-          context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
+        
+        onChanged();
+        return getContextIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ContextId context_id = 1;</code>
+       */
+      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
+        if (contextIdBuilder_ != null) {
+          return contextIdBuilder_.getMessageOrBuilder();
         } else {
-          devicesBuilder_.addMessage(builderForValue.build());
+          return contextId_ == null ?
+              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.ContextId context_id = 1;</code>
        */
-      public Builder addDevices(
-          int index, context.ContextOuterClass.Device.Builder builderForValue) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          devicesBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
+          getContextIdFieldBuilder() {
+        if (contextIdBuilder_ == null) {
+          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
+                  getContextId(),
+                  getParentForChildren(),
+                  isClean());
+          contextId_ = null;
         }
-        return this;
+        return contextIdBuilder_;
       }
+
+      private context.ContextOuterClass.Uuid sliceUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
+       * @return Whether the sliceUuid field is set.
        */
-      public Builder addAllDevices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Device> values) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, devices_);
-          onChanged();
+      public boolean hasSliceUuid() {
+        return sliceUuidBuilder_ != null || sliceUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid slice_uuid = 2;</code>
+       * @return The sliceUuid.
+       */
+      public context.ContextOuterClass.Uuid getSliceUuid() {
+        if (sliceUuidBuilder_ == null) {
+          return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
         } else {
-          devicesBuilder_.addAllMessages(values);
+          return sliceUuidBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public Builder clearDevices() {
-        if (devicesBuilder_ == null) {
-          devices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setSliceUuid(context.ContextOuterClass.Uuid value) {
+        if (sliceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceUuid_ = value;
           onChanged();
         } else {
-          devicesBuilder_.clear();
+          sliceUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public Builder removeDevices(int index) {
-        if (devicesBuilder_ == null) {
-          ensureDevicesIsMutable();
-          devices_.remove(index);
+      public Builder setSliceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = builderForValue.build();
           onChanged();
         } else {
-          devicesBuilder_.remove(index);
+          sliceUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
-       */
-      public context.ContextOuterClass.Device.Builder getDevicesBuilder(
-          int index) {
-        return getDevicesFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.DeviceOrBuilder getDevicesOrBuilder(
-          int index) {
-        if (devicesBuilder_ == null) {
-          return devices_.get(index);  } else {
-          return devicesBuilder_.getMessageOrBuilder(index);
+      public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
+        if (sliceUuidBuilder_ == null) {
+          if (sliceUuid_ != null) {
+            sliceUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
+          } else {
+            sliceUuid_ = value;
+          }
+          onChanged();
+        } else {
+          sliceUuidBuilder_.mergeFrom(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.DeviceOrBuilder> 
-           getDevicesOrBuilderList() {
-        if (devicesBuilder_ != null) {
-          return devicesBuilder_.getMessageOrBuilderList();
+      public Builder clearSliceUuid() {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuid_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(devices_);
+          sliceUuid_ = null;
+          sliceUuidBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.Device.Builder addDevicesBuilder() {
-        return getDevicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Device.getDefaultInstance());
+      public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
+        
+        onChanged();
+        return getSliceUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public context.ContextOuterClass.Device.Builder addDevicesBuilder(
-          int index) {
-        return getDevicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Device.getDefaultInstance());
+      public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
+        if (sliceUuidBuilder_ != null) {
+          return sliceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return sliceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+        }
       }
       /**
-       * <code>repeated .context.Device devices = 1;</code>
+       * <code>.context.Uuid slice_uuid = 2;</code>
        */
-      public java.util.List<context.ContextOuterClass.Device.Builder> 
-           getDevicesBuilderList() {
-        return getDevicesFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder> 
-          getDevicesFieldBuilder() {
-        if (devicesBuilder_ == null) {
-          devicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Device, context.ContextOuterClass.Device.Builder, context.ContextOuterClass.DeviceOrBuilder>(
-                  devices_,
-                  ((bitField0_ & 0x00000001) != 0),
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getSliceUuidFieldBuilder() {
+        if (sliceUuidBuilder_ == null) {
+          sliceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getSliceUuid(),
                   getParentForChildren(),
                   isClean());
-          devices_ = null;
+          sliceUuid_ = null;
         }
-        return devicesBuilder_;
+        return sliceUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -16448,100 +29593,230 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.DeviceList)
+      // @@protoc_insertion_point(builder_scope:context.SliceId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.DeviceList)
-    private static final context.ContextOuterClass.DeviceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceId)
+    private static final context.ContextOuterClass.SliceId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceId();
     }
 
-    public static context.ContextOuterClass.DeviceList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<DeviceList>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceList>() {
+    private static final com.google.protobuf.Parser<SliceId>
+        PARSER = new com.google.protobuf.AbstractParser<SliceId>() {
       @java.lang.Override
-      public DeviceList parsePartialFrom(
+      public SliceId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceList(input, extensionRegistry);
+        return new SliceId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<DeviceList> parser() {
+    public static com.google.protobuf.Parser<SliceId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<DeviceList> getParserForType() {
+    public com.google.protobuf.Parser<SliceId> getParserForType() {
       return PARSER;
     }
 
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceList getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface SliceOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Slice)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 1;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getSliceEndpointIdsList();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointId getSliceEndpointIds(int index);
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    int getSliceEndpointIdsCount();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getSliceEndpointIdsOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.Constraint> 
+        getSliceConstraintsList();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    context.ContextOuterClass.Constraint getSliceConstraints(int index);
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    int getSliceConstraintsCount();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getSliceConstraintsOrBuilderList();
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+        int index);
+
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getSliceServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceId getSliceServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    int getSliceServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSliceServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+        int index);
 
-  }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceSubsliceIdsList();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    context.ContextOuterClass.SliceId getSliceSubsliceIds(int index);
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    int getSliceSubsliceIdsCount();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceSubsliceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+        int index);
 
-  public interface DeviceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.DeviceEvent)
-      com.google.protobuf.MessageOrBuilder {
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return Whether the sliceStatus field is set.
+     */
+    boolean hasSliceStatus();
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return The sliceStatus.
+     */
+    context.ContextOuterClass.SliceStatus getSliceStatus();
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     */
+    context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * @return Whether the sliceOwner field is set.
      */
-    boolean hasEvent();
+    boolean hasSliceOwner();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * @return The sliceOwner.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.SliceOwner getSliceOwner();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.SliceOwner slice_owner = 7;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder();
 
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return Whether the timestamp field is set.
      */
-    boolean hasDeviceId();
+    boolean hasTimestamp();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return The timestamp.
      */
-    context.ContextOuterClass.DeviceId getDeviceId();
+    context.ContextOuterClass.Timestamp getTimestamp();
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>.context.Timestamp timestamp = 8;</code>
      */
-    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+    context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder();
   }
   /**
-   * Protobuf type {@code context.DeviceEvent}
+   * Protobuf type {@code context.Slice}
    */
-  public static final class DeviceEvent extends
+  public static final class Slice extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.DeviceEvent)
-      DeviceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Slice)
+      SliceOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use DeviceEvent.newBuilder() to construct.
-    private DeviceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Slice.newBuilder() to construct.
+    private Slice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private DeviceEvent() {
+    private Slice() {
+      sliceEndpointIds_ = java.util.Collections.emptyList();
+      sliceConstraints_ = java.util.Collections.emptyList();
+      sliceServiceIds_ = java.util.Collections.emptyList();
+      sliceSubsliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new DeviceEvent();
+      return new Slice();
     }
 
     @java.lang.Override
@@ -16549,7 +29824,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private DeviceEvent(
+    private Slice(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -16557,6 +29832,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 {
@@ -16568,27 +29844,89 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
-              if (deviceId_ != null) {
-                subBuilder = deviceId_.toBuilder();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-              deviceId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              sliceEndpointIds_.add(
+                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+                sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
+                mutable_bitField0_ |= 0x00000002;
+              }
+              sliceConstraints_.add(
+                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
+              break;
+            }
+            case 34: {
+              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+                sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000004;
+              }
+              sliceServiceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              break;
+            }
+            case 42: {
+              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
+                sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                mutable_bitField0_ |= 0x00000008;
+              }
+              sliceSubsliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
+              if (sliceStatus_ != null) {
+                subBuilder = sliceStatus_.toBuilder();
+              }
+              sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(deviceId_);
-                deviceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(sliceStatus_);
+                sliceStatus_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.SliceOwner.Builder subBuilder = null;
+              if (sliceOwner_ != null) {
+                subBuilder = sliceOwner_.toBuilder();
+              }
+              sliceOwner_ = input.readMessage(context.ContextOuterClass.SliceOwner.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(sliceOwner_);
+                sliceOwner_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 66: {
+              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;
@@ -16608,73 +29946,297 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+          sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
+        }
+        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+          sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
+        }
+        if (((mutable_bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+      return context.ContextOuterClass.internal_static_context_Slice_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+              context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int SLICE_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.SliceId slice_id = 1;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.SliceId slice_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
-    public static final int DEVICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.DeviceId deviceId_;
+    public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 2;
+    private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
+    public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
+      return sliceEndpointIds_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceId getDeviceId() {
-      return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getSliceEndpointIdsOrBuilderList() {
+      return sliceEndpointIds_;
     }
     /**
-     * <code>.context.DeviceId device_id = 2;</code>
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+    public int getSliceEndpointIdsCount() {
+      return sliceEndpointIds_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
+      return sliceEndpointIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+        int index) {
+      return sliceEndpointIds_.get(index);
+    }
+
+    public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
+      return sliceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+        getSliceConstraintsOrBuilderList() {
+      return sliceConstraints_;
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public int getSliceConstraintsCount() {
+      return sliceConstraints_.size();
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
+      return sliceConstraints_.get(index);
+    }
+    /**
+     * <code>repeated .context.Constraint slice_constraints = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+        int index) {
+      return sliceConstraints_.get(index);
+    }
+
+    public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 4;
+    private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
+      return sliceServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getSliceServiceIdsOrBuilderList() {
+      return sliceServiceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public int getSliceServiceIdsCount() {
+      return sliceServiceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
+      return sliceServiceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+        int index) {
+      return sliceServiceIds_.get(index);
+    }
+
+    public static final int SLICE_SUBSLICE_IDS_FIELD_NUMBER = 5;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
+      return sliceSubsliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceSubsliceIdsOrBuilderList() {
+      return sliceSubsliceIds_;
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public int getSliceSubsliceIdsCount() {
+      return sliceSubsliceIds_.size();
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
+      return sliceSubsliceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+        int index) {
+      return sliceSubsliceIds_.get(index);
+    }
+
+    public static final int SLICE_STATUS_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.SliceStatus sliceStatus_;
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return Whether the sliceStatus field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceStatus() {
+      return sliceStatus_ != null;
+    }
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     * @return The sliceStatus.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatus getSliceStatus() {
+      return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+    }
+    /**
+     * <code>.context.SliceStatus slice_status = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
+      return getSliceStatus();
+    }
+
+    public static final int SLICE_OWNER_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.SliceOwner sliceOwner_;
+    /**
+     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * @return Whether the sliceOwner field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceOwner() {
+      return sliceOwner_ != null;
+    }
+    /**
+     * <code>.context.SliceOwner slice_owner = 7;</code>
+     * @return The sliceOwner.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceOwner getSliceOwner() {
+      return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
+    }
+    /**
+     * <code>.context.SliceOwner slice_owner = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
+      return getSliceOwner();
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.Timestamp timestamp_;
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return Whether the timestamp field is set.
+     */
+    @java.lang.Override
+    public boolean hasTimestamp() {
+      return timestamp_ != null;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Timestamp getTimestamp() {
+      return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+    }
+    /**
+     * <code>.context.Timestamp timestamp = 8;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+      return getTimestamp();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -16691,11 +30253,29 @@ 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(1, getSliceId());
       }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
+      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
+        output.writeMessage(2, sliceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < sliceConstraints_.size(); i++) {
+        output.writeMessage(3, sliceConstraints_.get(i));
+      }
+      for (int i = 0; i < sliceServiceIds_.size(); i++) {
+        output.writeMessage(4, sliceServiceIds_.get(i));
+      }
+      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+        output.writeMessage(5, sliceSubsliceIds_.get(i));
+      }
+      if (sliceStatus_ != null) {
+        output.writeMessage(6, getSliceStatus());
+      }
+      if (sliceOwner_ != null) {
+        output.writeMessage(7, getSliceOwner());
+      }
+      if (timestamp_ != null) {
+        output.writeMessage(8, getTimestamp());
       }
       unknownFields.writeTo(output);
     }
@@ -16706,13 +30286,37 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getSliceId());
       }
-      if (deviceId_ != null) {
+      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
+          .computeMessageSize(2, sliceEndpointIds_.get(i));
+      }
+      for (int i = 0; i < sliceConstraints_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, sliceConstraints_.get(i));
+      }
+      for (int i = 0; i < sliceServiceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, sliceServiceIds_.get(i));
+      }
+      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, sliceSubsliceIds_.get(i));
+      }
+      if (sliceStatus_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getSliceStatus());
+      }
+      if (sliceOwner_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceOwner());
+      }
+      if (timestamp_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(8, getTimestamp());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -16724,20 +30328,38 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.DeviceEvent)) {
-        return super.equals(obj);
+      if (!(obj instanceof context.ContextOuterClass.Slice)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Slice other = (context.ContextOuterClass.Slice) obj;
+
+      if (hasSliceId() != other.hasSliceId()) return false;
+      if (hasSliceId()) {
+        if (!getSliceId()
+            .equals(other.getSliceId())) return false;
+      }
+      if (!getSliceEndpointIdsList()
+          .equals(other.getSliceEndpointIdsList())) return false;
+      if (!getSliceConstraintsList()
+          .equals(other.getSliceConstraintsList())) return false;
+      if (!getSliceServiceIdsList()
+          .equals(other.getSliceServiceIdsList())) return false;
+      if (!getSliceSubsliceIdsList()
+          .equals(other.getSliceSubsliceIdsList())) return false;
+      if (hasSliceStatus() != other.hasSliceStatus()) return false;
+      if (hasSliceStatus()) {
+        if (!getSliceStatus()
+            .equals(other.getSliceStatus())) return false;
       }
-      context.ContextOuterClass.DeviceEvent other = (context.ContextOuterClass.DeviceEvent) obj;
-
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      if (hasSliceOwner() != other.hasSliceOwner()) return false;
+      if (hasSliceOwner()) {
+        if (!getSliceOwner()
+            .equals(other.getSliceOwner())) return false;
       }
-      if (hasDeviceId() != other.hasDeviceId()) return false;
-      if (hasDeviceId()) {
-        if (!getDeviceId()
-            .equals(other.getDeviceId())) 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;
@@ -16750,82 +30372,106 @@ 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 (hasDeviceId()) {
-        hash = (37 * hash) + DEVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getDeviceId().hashCode();
+      if (getSliceEndpointIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_ENDPOINT_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceEndpointIdsList().hashCode();
+      }
+      if (getSliceConstraintsCount() > 0) {
+        hash = (37 * hash) + SLICE_CONSTRAINTS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceConstraintsList().hashCode();
+      }
+      if (getSliceServiceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_SERVICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceServiceIdsList().hashCode();
+      }
+      if (getSliceSubsliceIdsCount() > 0) {
+        hash = (37 * hash) + SLICE_SUBSLICE_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceSubsliceIdsList().hashCode();
+      }
+      if (hasSliceStatus()) {
+        hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceStatus().hashCode();
+      }
+      if (hasSliceOwner()) {
+        hash = (37 * hash) + SLICE_OWNER_FIELD_NUMBER;
+        hash = (53 * hash) + getSliceOwner().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 context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice 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.DeviceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.Slice parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Slice parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice 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.DeviceEvent parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.Slice parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseDelimitedFrom(
+    public static context.ContextOuterClass.Slice 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.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.DeviceEvent parseFrom(
+    public static context.ContextOuterClass.Slice parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -16838,7 +30484,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.DeviceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Slice prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -16854,26 +30500,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.DeviceEvent}
+     * Protobuf type {@code context.Slice}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.DeviceEvent)
-        context.ContextOuterClass.DeviceEventOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.Slice)
+        context.ContextOuterClass.SliceOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.DeviceEvent.class, context.ContextOuterClass.DeviceEvent.Builder.class);
+                context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.DeviceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.Slice.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -16886,22 +30532,62 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSliceEndpointIdsFieldBuilder();
+          getSliceConstraintsFieldBuilder();
+          getSliceServiceIdsFieldBuilder();
+          getSliceSubsliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          sliceEndpointIdsBuilder_.clear();
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+        } else {
+          sliceConstraintsBuilder_.clear();
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
+        } else {
+          sliceServiceIdsBuilder_.clear();
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+        } else {
+          sliceSubsliceIdsBuilder_.clear();
+        }
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = null;
+        } else {
+          sliceStatus_ = null;
+          sliceStatusBuilder_ = null;
+        }
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = null;
+        } else {
+          sliceOwner_ = null;
+          sliceOwnerBuilder_ = null;
+        }
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+        } else {
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
         return this;
       }
@@ -16909,17 +30595,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_DeviceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.DeviceEvent.getDefaultInstance();
+      public context.ContextOuterClass.Slice getDefaultInstanceForType() {
+        return context.ContextOuterClass.Slice.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent build() {
-        context.ContextOuterClass.DeviceEvent result = buildPartial();
+      public context.ContextOuterClass.Slice build() {
+        context.ContextOuterClass.Slice result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -16927,17 +30613,64 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.DeviceEvent buildPartial() {
-        context.ContextOuterClass.DeviceEvent result = new context.ContextOuterClass.DeviceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
+      public context.ContextOuterClass.Slice buildPartial() {
+        context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
+        int from_bitField0_ = bitField0_;
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
         } else {
-          result.event_ = eventBuilder_.build();
+          result.sliceId_ = sliceIdBuilder_.build();
         }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.sliceEndpointIds_ = sliceEndpointIds_;
         } else {
-          result.deviceId_ = deviceIdBuilder_.build();
+          result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          if (((bitField0_ & 0x00000002) != 0)) {
+            sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
+            bitField0_ = (bitField0_ & ~0x00000002);
+          }
+          result.sliceConstraints_ = sliceConstraints_;
+        } else {
+          result.sliceConstraints_ = sliceConstraintsBuilder_.build();
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000004) != 0)) {
+            sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
+            bitField0_ = (bitField0_ & ~0x00000004);
+          }
+          result.sliceServiceIds_ = sliceServiceIds_;
+        } else {
+          result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000008) != 0)) {
+            sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+            bitField0_ = (bitField0_ & ~0x00000008);
+          }
+          result.sliceSubsliceIds_ = sliceSubsliceIds_;
+        } else {
+          result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
+        }
+        if (sliceStatusBuilder_ == null) {
+          result.sliceStatus_ = sliceStatus_;
+        } else {
+          result.sliceStatus_ = sliceStatusBuilder_.build();
+        }
+        if (sliceOwnerBuilder_ == null) {
+          result.sliceOwner_ = sliceOwner_;
+        } else {
+          result.sliceOwner_ = sliceOwnerBuilder_.build();
+        }
+        if (timestampBuilder_ == null) {
+          result.timestamp_ = timestamp_;
+        } else {
+          result.timestamp_ = timestampBuilder_.build();
         }
         onBuilt();
         return result;
@@ -16977,21 +30710,131 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.DeviceEvent) {
-          return mergeFrom((context.ContextOuterClass.DeviceEvent)other);
+        if (other instanceof context.ContextOuterClass.Slice) {
+          return mergeFrom((context.ContextOuterClass.Slice)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.DeviceEvent other) {
-        if (other == context.ContextOuterClass.DeviceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.Slice other) {
+        if (other == context.ContextOuterClass.Slice.getDefaultInstance()) return this;
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
-        if (other.hasDeviceId()) {
-          mergeDeviceId(other.getDeviceId());
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (!other.sliceEndpointIds_.isEmpty()) {
+            if (sliceEndpointIds_.isEmpty()) {
+              sliceEndpointIds_ = other.sliceEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureSliceEndpointIdsIsMutable();
+              sliceEndpointIds_.addAll(other.sliceEndpointIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceEndpointIds_.isEmpty()) {
+            if (sliceEndpointIdsBuilder_.isEmpty()) {
+              sliceEndpointIdsBuilder_.dispose();
+              sliceEndpointIdsBuilder_ = null;
+              sliceEndpointIds_ = other.sliceEndpointIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              sliceEndpointIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceEndpointIdsFieldBuilder() : null;
+            } else {
+              sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
+            }
+          }
+        }
+        if (sliceConstraintsBuilder_ == null) {
+          if (!other.sliceConstraints_.isEmpty()) {
+            if (sliceConstraints_.isEmpty()) {
+              sliceConstraints_ = other.sliceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+            } else {
+              ensureSliceConstraintsIsMutable();
+              sliceConstraints_.addAll(other.sliceConstraints_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceConstraints_.isEmpty()) {
+            if (sliceConstraintsBuilder_.isEmpty()) {
+              sliceConstraintsBuilder_.dispose();
+              sliceConstraintsBuilder_ = null;
+              sliceConstraints_ = other.sliceConstraints_;
+              bitField0_ = (bitField0_ & ~0x00000002);
+              sliceConstraintsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceConstraintsFieldBuilder() : null;
+            } else {
+              sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
+            }
+          }
+        }
+        if (sliceServiceIdsBuilder_ == null) {
+          if (!other.sliceServiceIds_.isEmpty()) {
+            if (sliceServiceIds_.isEmpty()) {
+              sliceServiceIds_ = other.sliceServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+            } else {
+              ensureSliceServiceIdsIsMutable();
+              sliceServiceIds_.addAll(other.sliceServiceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceServiceIds_.isEmpty()) {
+            if (sliceServiceIdsBuilder_.isEmpty()) {
+              sliceServiceIdsBuilder_.dispose();
+              sliceServiceIdsBuilder_ = null;
+              sliceServiceIds_ = other.sliceServiceIds_;
+              bitField0_ = (bitField0_ & ~0x00000004);
+              sliceServiceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceServiceIdsFieldBuilder() : null;
+            } else {
+              sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
+            }
+          }
+        }
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (!other.sliceSubsliceIds_.isEmpty()) {
+            if (sliceSubsliceIds_.isEmpty()) {
+              sliceSubsliceIds_ = other.sliceSubsliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+            } else {
+              ensureSliceSubsliceIdsIsMutable();
+              sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceSubsliceIds_.isEmpty()) {
+            if (sliceSubsliceIdsBuilder_.isEmpty()) {
+              sliceSubsliceIdsBuilder_.dispose();
+              sliceSubsliceIdsBuilder_ = null;
+              sliceSubsliceIds_ = other.sliceSubsliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000008);
+              sliceSubsliceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceSubsliceIdsFieldBuilder() : null;
+            } else {
+              sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
+            }
+          }
+        }
+        if (other.hasSliceStatus()) {
+          mergeSliceStatus(other.getSliceStatus());
+        }
+        if (other.hasSliceOwner()) {
+          mergeSliceOwner(other.getSliceOwner());
+        }
+        if (other.hasTimestamp()) {
+          mergeTimestamp(other.getTimestamp());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -17008,11 +30851,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.DeviceEvent parsedMessage = null;
+        context.ContextOuterClass.Slice parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.DeviceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Slice) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -17021,1868 +30864,1442 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.SliceId sliceId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.SliceId slice_id = 1;</code>
+       * @return Whether the sliceId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.SliceId slice_id = 1;</code>
+       * @return The sliceId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return eventBuilder_.getMessage();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          sliceId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          sliceIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</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 mergeSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (sliceId_ != null) {
+            sliceId_ =
+              context.ContextOuterClass.SliceId.newBuilder(sliceId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            sliceId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          sliceIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getSliceIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+        if (sliceIdBuilder_ != null) {
+          return sliceIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.SliceId slice_id = 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(),
+          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());
-          event_ = null;
+          sliceId_ = null;
         }
-        return eventBuilder_;
+        return sliceIdBuilder_;
       }
 
-      private context.ContextOuterClass.DeviceId deviceId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> deviceIdBuilder_;
+      private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> sliceEndpointIdsBuilder_;
+
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return Whether the deviceId field is set.
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
+        } else {
+          return sliceEndpointIdsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public int getSliceEndpointIdsCount() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.size();
+        } else {
+          return sliceEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.get(index);
+        } else {
+          return sliceEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public Builder setSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+      public Builder setSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.set(index, builderForValue.build());
+          onChanged();
         } else {
-          return deviceIdBuilder_.getMessage();
+          sliceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
+      public Builder addSliceEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          deviceId_ = value;
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(value);
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(value);
+          sliceEndpointIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
+      public Builder addSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(index, value);
           onChanged();
         } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
+          sliceEndpointIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</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 addSliceEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(builderForValue.build());
           onChanged();
         } else {
-          deviceIdBuilder_.mergeFrom(value);
+          sliceEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
+      public Builder addSliceEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.add(index, builderForValue.build());
           onChanged();
         } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+          sliceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+      public Builder addAllSliceEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceEndpointIds_);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
        */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
+      public Builder clearSliceEndpointIds() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+          sliceEndpointIdsBuilder_.clear();
         }
+        return this;
       }
       /**
-       * <code>.context.DeviceId device_id = 2;</code>
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</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 removeSliceEndpointIds(int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          ensureSliceEndpointIdsIsMutable();
+          sliceEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          sliceEndpointIdsBuilder_.remove(index);
         }
-        return deviceIdBuilder_;
-      }
-      @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.DeviceEvent)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.DeviceEvent)
-    private static final context.ContextOuterClass.DeviceEvent DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.DeviceEvent();
-    }
-
-    public static context.ContextOuterClass.DeviceEvent getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<DeviceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<DeviceEvent>() {
-      @java.lang.Override
-      public DeviceEvent parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new DeviceEvent(input, extensionRegistry);
+        return this;
       }
-    };
-
-    public static com.google.protobuf.Parser<DeviceEvent> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<DeviceEvent> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceEvent getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface LinkIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkId)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return Whether the linkUuid field is set.
-     */
-    boolean hasLinkUuid();
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return The linkUuid.
-     */
-    context.ContextOuterClass.Uuid getLinkUuid();
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     */
-    context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder();
-  }
-  /**
-   * <pre>
-   * ----- Link ----------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.LinkId}
-   */
-  public static final class LinkId extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkId)
-      LinkIdOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use LinkId.newBuilder() to construct.
-    private LinkId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private LinkId() {
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new LinkId();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private LinkId(
-        com.google.protobuf.CodedInputStream input,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      this();
-      if (extensionRegistry == null) {
-        throw new java.lang.NullPointerException();
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getSliceEndpointIdsBuilder(
+          int index) {
+        return getSliceEndpointIdsFieldBuilder().getBuilder(index);
       }
-      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 (linkUuid_ != null) {
-                subBuilder = linkUuid_.toBuilder();
-              }
-              linkUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkUuid_);
-                linkUuid_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            default: {
-              if (!parseUnknownField(
-                  input, unknownFields, extensionRegistry, tag)) {
-                done = true;
-              }
-              break;
-            }
-          }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
+          int index) {
+        if (sliceEndpointIdsBuilder_ == null) {
+          return sliceEndpointIds_.get(index);  } else {
+          return sliceEndpointIdsBuilder_.getMessageOrBuilder(index);
         }
-      } 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_LinkId_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
-    }
-
-    public static final int LINK_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid linkUuid_;
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return Whether the linkUuid field is set.
-     */
-    @java.lang.Override
-    public boolean hasLinkUuid() {
-      return linkUuid_ != null;
-    }
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     * @return The linkUuid.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Uuid getLinkUuid() {
-      return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
-    }
-    /**
-     * <code>.context.Uuid link_uuid = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-      return getLinkUuid();
-    }
-
-    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 (linkUuid_ != null) {
-        output.writeMessage(1, getLinkUuid());
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (linkUuid_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getLinkUuid());
-      }
-      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.LinkId)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.LinkId other = (context.ContextOuterClass.LinkId) obj;
-
-      if (hasLinkUuid() != other.hasLinkUuid()) return false;
-      if (hasLinkUuid()) {
-        if (!getLinkUuid()
-            .equals(other.getLinkUuid())) 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 (hasLinkUuid()) {
-        hash = (37 * hash) + LINK_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkUuid().hashCode();
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getSliceEndpointIdsOrBuilderList() {
+        if (sliceEndpointIdsBuilder_ != null) {
+          return sliceEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
+        }
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.LinkId parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.LinkId parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.LinkId parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.LinkId 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.LinkId parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.LinkId parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.LinkId parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.LinkId 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.LinkId parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.LinkId 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.LinkId parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.LinkId 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.LinkId 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;
-    }
-    /**
-     * <pre>
-     * ----- Link ----------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.LinkId}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkId)
-        context.ContextOuterClass.LinkIdOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder() {
+        return getSliceEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkId_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkId.class, context.ContextOuterClass.LinkId.Builder.class);
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder(
+          int index) {
+        return getSliceEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getSliceEndpointIdsBuilderList() {
+        return getSliceEndpointIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getSliceEndpointIdsFieldBuilder() {
+        if (sliceEndpointIdsBuilder_ == null) {
+          sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  sliceEndpointIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceEndpointIds_ = null;
+        }
+        return sliceEndpointIdsBuilder_;
       }
 
-      // Construct using context.ContextOuterClass.LinkId.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceConstraintsIsMutable() {
+        if (!((bitField0_ & 0x00000002) != 0)) {
+          sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
+          bitField0_ |= 0x00000002;
+         }
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> sliceConstraintsBuilder_;
+
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
+        if (sliceConstraintsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceConstraints_);
+        } else {
+          return sliceConstraintsBuilder_.getMessageList();
+        }
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public int getSliceConstraintsCount() {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.size();
+        } else {
+          return sliceConstraintsBuilder_.getCount();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = null;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.get(index);
         } else {
-          linkUuid_ = null;
-          linkUuidBuilder_ = null;
+          return sliceConstraintsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder setSliceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.set(index, value);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.setMessage(index, value);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder setSliceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkId.getDefaultInstance();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(value);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(value);
+        }
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.LinkId build() {
-        context.ContextOuterClass.LinkId result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(
+          int index, context.ContextOuterClass.Constraint value) {
+        if (sliceConstraintsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(index, value);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(index, value);
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.LinkId buildPartial() {
-        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
-        if (linkUuidBuilder_ == null) {
-          result.linkUuid_ = linkUuid_;
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(
+          context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(builderForValue.build());
+          onChanged();
         } else {
-          result.linkUuid_ = linkUuidBuilder_.build();
+          sliceConstraintsBuilder_.addMessage(builderForValue.build());
         }
-        onBuilt();
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addSliceConstraints(
+          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addMessage(index, builderForValue.build());
+        }
+        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 .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder addAllSliceConstraints(
+          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceConstraints_);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder clearSliceConstraints() {
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraints_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000002);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public Builder removeSliceConstraints(int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          ensureSliceConstraintsIsMutable();
+          sliceConstraints_.remove(index);
+          onChanged();
+        } else {
+          sliceConstraintsBuilder_.remove(index);
+        }
+        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);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getSliceConstraintsBuilder(
+          int index) {
+        return getSliceConstraintsFieldBuilder().getBuilder(index);
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+          int index) {
+        if (sliceConstraintsBuilder_ == null) {
+          return sliceConstraints_.get(index);  } else {
+          return sliceConstraintsBuilder_.getMessageOrBuilder(index);
+        }
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkId) {
-          return mergeFrom((context.ContextOuterClass.LinkId)other);
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getSliceConstraintsOrBuilderList() {
+        if (sliceConstraintsBuilder_ != null) {
+          return sliceConstraintsBuilder_.getMessageOrBuilderList();
         } else {
-          super.mergeFrom(other);
-          return this;
+          return java.util.Collections.unmodifiableList(sliceConstraints_);
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.LinkId other) {
-        if (other == context.ContextOuterClass.LinkId.getDefaultInstance()) return this;
-        if (other.hasLinkUuid()) {
-          mergeLinkUuid(other.getLinkUuid());
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder() {
+        return getSliceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder(
+          int index) {
+        return getSliceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getSliceConstraintsBuilderList() {
+        return getSliceConstraintsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
+          getSliceConstraintsFieldBuilder() {
+        if (sliceConstraintsBuilder_ == null) {
+          sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
+                  sliceConstraints_,
+                  ((bitField0_ & 0x00000002) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceConstraints_ = null;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        return sliceConstraintsBuilder_;
       }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceServiceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000004) != 0)) {
+          sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
+          bitField0_ |= 0x00000004;
+         }
       }
 
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.LinkId parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkId) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> sliceServiceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
+        if (sliceServiceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceServiceIds_);
+        } else {
+          return sliceServiceIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public int getSliceServiceIdsCount() {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.size();
+        } else {
+          return sliceServiceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.get(index);
+        } else {
+          return sliceServiceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public Builder setSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.set(index, value);
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
-
-      private context.ContextOuterClass.Uuid linkUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> linkUuidBuilder_;
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       * @return Whether the linkUuid field is set.
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public boolean hasLinkUuid() {
-        return linkUuidBuilder_ != null || linkUuid_ != null;
+      public Builder setSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
-       * @return The linkUuid.
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.Uuid getLinkUuid() {
-        if (linkUuidBuilder_ == null) {
-          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+      public Builder addSliceServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(value);
+          onChanged();
         } else {
-          return linkUuidBuilder_.getMessage();
+          sliceServiceIdsBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
-        if (linkUuidBuilder_ == null) {
+      public Builder addSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (sliceServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          linkUuid_ = value;
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(index, value);
           onChanged();
         } else {
-          linkUuidBuilder_.setMessage(value);
+          sliceServiceIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder setLinkUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = builderForValue.build();
+      public Builder addSliceServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          linkUuidBuilder_.setMessage(builderForValue.build());
+          sliceServiceIdsBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder mergeLinkUuid(context.ContextOuterClass.Uuid value) {
-        if (linkUuidBuilder_ == null) {
-          if (linkUuid_ != null) {
-            linkUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(linkUuid_).mergeFrom(value).buildPartial();
-          } else {
-            linkUuid_ = value;
-          }
+      public Builder addSliceServiceIds(
+          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public Builder addAllSliceServiceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceServiceIds_);
+          onChanged();
+        } else {
+          sliceServiceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public Builder clearSliceServiceIds() {
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000004);
           onChanged();
         } else {
-          linkUuidBuilder_.mergeFrom(value);
+          sliceServiceIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public Builder clearLinkUuid() {
-        if (linkUuidBuilder_ == null) {
-          linkUuid_ = null;
+      public Builder removeSliceServiceIds(int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          ensureSliceServiceIdsIsMutable();
+          sliceServiceIds_.remove(index);
           onChanged();
         } else {
-          linkUuid_ = null;
-          linkUuidBuilder_ = null;
+          sliceServiceIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
-        
-        onChanged();
-        return getLinkUuidFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ServiceId.Builder getSliceServiceIdsBuilder(
+          int index) {
+        return getSliceServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
-        if (linkUuidBuilder_ != null) {
-          return linkUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return linkUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+      public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
+          int index) {
+        if (sliceServiceIdsBuilder_ == null) {
+          return sliceServiceIds_.get(index);  } else {
+          return sliceServiceIdsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>.context.Uuid link_uuid = 1;</code>
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getLinkUuidFieldBuilder() {
-        if (linkUuidBuilder_ == null) {
-          linkUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getLinkUuid(),
-                  getParentForChildren(),
-                  isClean());
-          linkUuid_ = null;
-        }
-        return linkUuidBuilder_;
-      }
-      @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.LinkId)
-    }
-
-    // @@protoc_insertion_point(class_scope:context.LinkId)
-    private static final context.ContextOuterClass.LinkId DEFAULT_INSTANCE;
-    static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkId();
-    }
-
-    public static context.ContextOuterClass.LinkId getDefaultInstance() {
-      return DEFAULT_INSTANCE;
-    }
-
-    private static final com.google.protobuf.Parser<LinkId>
-        PARSER = new com.google.protobuf.AbstractParser<LinkId>() {
-      @java.lang.Override
-      public LinkId parsePartialFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkId(input, extensionRegistry);
-      }
-    };
-
-    public static com.google.protobuf.Parser<LinkId> parser() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Parser<LinkId> getParserForType() {
-      return PARSER;
-    }
-
-    @java.lang.Override
-    public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
-      return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface LinkOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Link)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return Whether the linkId field is set.
-     */
-    boolean hasLinkId();
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return The linkId.
-     */
-    context.ContextOuterClass.LinkId getLinkId();
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
-
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getLinkEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointId getLinkEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    int getLinkEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getLinkEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
-        int index);
-  }
-  /**
-   * Protobuf type {@code context.Link}
-   */
-  public static final class Link extends
-      com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Link)
-      LinkOrBuilder {
-  private static final long serialVersionUID = 0L;
-    // Use Link.newBuilder() to construct.
-    private Link(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
-      super(builder);
-    }
-    private Link() {
-      linkEndpointIds_ = java.util.Collections.emptyList();
-    }
-
-    @java.lang.Override
-    @SuppressWarnings({"unused"})
-    protected java.lang.Object newInstance(
-        UnusedPrivateParameter unused) {
-      return new Link();
-    }
-
-    @java.lang.Override
-    public final com.google.protobuf.UnknownFieldSet
-    getUnknownFields() {
-      return this.unknownFields;
-    }
-    private Link(
-        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.LinkId.Builder subBuilder = null;
-              if (linkId_ != null) {
-                subBuilder = linkId_.toBuilder();
-              }
-              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkId_);
-                linkId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              linkEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.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)) {
-          linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+           getSliceServiceIdsOrBuilderList() {
+        if (sliceServiceIdsBuilder_ != null) {
+          return sliceServiceIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(sliceServiceIds_);
         }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Link_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
-    }
-
-    public static final int LINK_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.LinkId linkId_;
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return Whether the linkId field is set.
-     */
-    @java.lang.Override
-    public boolean hasLinkId() {
-      return linkId_ != null;
-    }
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     * @return The linkId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkId() {
-      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-    }
-    /**
-     * <code>.context.LinkId link_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-      return getLinkId();
-    }
-
-    public static final int LINK_ENDPOINT_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
-      return linkEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getLinkEndpointIdsOrBuilderList() {
-      return linkEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public int getLinkEndpointIdsCount() {
-      return linkEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
-      return linkEndpointIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
-        int index) {
-      return linkEndpointIds_.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 {
-      if (linkId_ != null) {
-        output.writeMessage(1, getLinkId());
-      }
-      for (int i = 0; i < linkEndpointIds_.size(); i++) {
-        output.writeMessage(2, linkEndpointIds_.get(i));
-      }
-      unknownFields.writeTo(output);
-    }
-
-    @java.lang.Override
-    public int getSerializedSize() {
-      int size = memoizedSize;
-      if (size != -1) return size;
-
-      size = 0;
-      if (linkId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getLinkId());
-      }
-      for (int i = 0; i < linkEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, linkEndpointIds_.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.Link)) {
-        return super.equals(obj);
-      }
-      context.ContextOuterClass.Link other = (context.ContextOuterClass.Link) obj;
-
-      if (hasLinkId() != other.hasLinkId()) return false;
-      if (hasLinkId()) {
-        if (!getLinkId()
-            .equals(other.getLinkId())) return false;
-      }
-      if (!getLinkEndpointIdsList()
-          .equals(other.getLinkEndpointIdsList())) 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 (hasLinkId()) {
-        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkId().hashCode();
-      }
-      if (getLinkEndpointIdsCount() > 0) {
-        hash = (37 * hash) + LINK_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkEndpointIdsList().hashCode();
       }
-      hash = (29 * hash) + unknownFields.hashCode();
-      memoizedHashCode = hash;
-      return hash;
-    }
-
-    public static context.ContextOuterClass.Link parseFrom(
-        java.nio.ByteBuffer data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.Link parseFrom(
-        java.nio.ByteBuffer data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.Link parseFrom(
-        com.google.protobuf.ByteString data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.Link 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.Link parseFrom(byte[] data)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data);
-    }
-    public static context.ContextOuterClass.Link parseFrom(
-        byte[] data,
-        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-        throws com.google.protobuf.InvalidProtocolBufferException {
-      return PARSER.parseFrom(data, extensionRegistry);
-    }
-    public static context.ContextOuterClass.Link parseFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.Link 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.Link parseDelimitedFrom(java.io.InputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseDelimitedWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.Link 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.Link parseFrom(
-        com.google.protobuf.CodedInputStream input)
-        throws java.io.IOException {
-      return com.google.protobuf.GeneratedMessageV3
-          .parseWithIOException(PARSER, input);
-    }
-    public static context.ContextOuterClass.Link 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.Link 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.Link}
-     */
-    public static final class Builder extends
-        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Link)
-        context.ContextOuterClass.LinkOrBuilder {
-      public static final com.google.protobuf.Descriptors.Descriptor
-          getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_Link_descriptor;
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder() {
+        return getSliceServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
       }
-
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Link_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Link.class, context.ContextOuterClass.Link.Builder.class);
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder(
+          int index) {
+        return getSliceServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
+           getSliceServiceIdsBuilderList() {
+        return getSliceServiceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getSliceServiceIdsFieldBuilder() {
+        if (sliceServiceIdsBuilder_ == null) {
+          sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  sliceServiceIds_,
+                  ((bitField0_ & 0x00000004) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceServiceIds_ = null;
+        }
+        return sliceServiceIdsBuilder_;
       }
 
-      // Construct using context.ContextOuterClass.Link.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceSubsliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000008) != 0)) {
+          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
+          bitField0_ |= 0x00000008;
+         }
       }
 
-      private Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
+
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+        } else {
+          return sliceSubsliceIdsBuilder_.getMessageList();
+        }
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
-          getLinkEndpointIdsFieldBuilder();
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public int getSliceSubsliceIdsCount() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.size();
+        } else {
+          return sliceSubsliceIdsBuilder_.getCount();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.get(index);
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          return sliceSubsliceIdsBuilder_.getMessage(index);
         }
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, value);
+          onChanged();
         } else {
-          linkEndpointIdsBuilder_.clear();
+          sliceSubsliceIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Link_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Link getDefaultInstanceForType() {
-        return context.ContextOuterClass.Link.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Link build() {
-        context.ContextOuterClass.Link result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder setSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Link buildPartial() {
-        context.ContextOuterClass.Link result = new context.ContextOuterClass.Link(this);
-        int from_bitField0_ = bitField0_;
-        if (linkIdBuilder_ == null) {
-          result.linkId_ = linkId_;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(value);
+          onChanged();
         } else {
-          result.linkId_ = linkIdBuilder_.build();
+          sliceSubsliceIdsBuilder_.addMessage(value);
         }
-        if (linkEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
+        return this;
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
-          result.linkEndpointIds_ = linkEndpointIds_;
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(index, value);
+          onChanged();
         } else {
-          result.linkEndpointIds_ = linkEndpointIdsBuilder_.build();
+          sliceSubsliceIdsBuilder_.addMessage(index, value);
         }
-        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);
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addSliceSubsliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        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);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder addAllSliceSubsliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceSubsliceIds_);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.addAllMessages(values);
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder clearSliceSubsliceIds() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000008);
+          onChanged();
+        } else {
+          sliceSubsliceIdsBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Link) {
-          return mergeFrom((context.ContextOuterClass.Link)other);
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public Builder removeSliceSubsliceIds(int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          ensureSliceSubsliceIdsIsMutable();
+          sliceSubsliceIds_.remove(index);
+          onChanged();
         } else {
-          super.mergeFrom(other);
-          return this;
+          sliceSubsliceIdsBuilder_.remove(index);
         }
+        return this;
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.Link other) {
-        if (other == context.ContextOuterClass.Link.getDefaultInstance()) return this;
-        if (other.hasLinkId()) {
-          mergeLinkId(other.getLinkId());
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceSubsliceIdsBuilder(
+          int index) {
+        return getSliceSubsliceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+          int index) {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          return sliceSubsliceIds_.get(index);  } else {
+          return sliceSubsliceIdsBuilder_.getMessageOrBuilder(index);
         }
-        if (linkEndpointIdsBuilder_ == null) {
-          if (!other.linkEndpointIds_.isEmpty()) {
-            if (linkEndpointIds_.isEmpty()) {
-              linkEndpointIds_ = other.linkEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLinkEndpointIdsIsMutable();
-              linkEndpointIds_.addAll(other.linkEndpointIds_);
-            }
-            onChanged();
-          }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceSubsliceIdsOrBuilderList() {
+        if (sliceSubsliceIdsBuilder_ != null) {
+          return sliceSubsliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          if (!other.linkEndpointIds_.isEmpty()) {
-            if (linkEndpointIdsBuilder_.isEmpty()) {
-              linkEndpointIdsBuilder_.dispose();
-              linkEndpointIdsBuilder_ = null;
-              linkEndpointIds_ = other.linkEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              linkEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkEndpointIdsFieldBuilder() : null;
-            } else {
-              linkEndpointIdsBuilder_.addAllMessages(other.linkEndpointIds_);
-            }
-          }
+          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder() {
+        return getSliceSubsliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Link parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Link) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder(
+          int index) {
+        return getSliceSubsliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       */
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceSubsliceIdsBuilderList() {
+        return getSliceSubsliceIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
+          getSliceSubsliceIdsFieldBuilder() {
+        if (sliceSubsliceIdsBuilder_ == null) {
+          sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
+                  sliceSubsliceIds_,
+                  ((bitField0_ & 0x00000008) != 0),
+                  getParentForChildren(),
+                  isClean());
+          sliceSubsliceIds_ = null;
         }
-        return this;
+        return sliceSubsliceIdsBuilder_;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.LinkId linkId_;
+      private context.ContextOuterClass.SliceStatus sliceStatus_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
+          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> sliceStatusBuilder_;
       /**
-       * <code>.context.LinkId link_id = 1;</code>
-       * @return Whether the linkId field is set.
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       * @return Whether the sliceStatus field is set.
        */
-      public boolean hasLinkId() {
-        return linkIdBuilder_ != null || linkId_ != null;
+      public boolean hasSliceStatus() {
+        return sliceStatusBuilder_ != null || sliceStatus_ != null;
       }
       /**
-       * <code>.context.LinkId link_id = 1;</code>
-       * @return The linkId.
+       * <code>.context.SliceStatus slice_status = 6;</code>
+       * @return The sliceStatus.
        */
-      public context.ContextOuterClass.LinkId getLinkId() {
-        if (linkIdBuilder_ == null) {
-          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+      public context.ContextOuterClass.SliceStatus getSliceStatus() {
+        if (sliceStatusBuilder_ == null) {
+          return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
         } else {
-          return linkIdBuilder_.getMessage();
+          return sliceStatusBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.LinkId link_id = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          linkId_ = value;
+          sliceStatus_ = value;
           onChanged();
         } else {
-          linkIdBuilder_.setMessage(value);
+          sliceStatusBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public Builder setLinkId(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdBuilder_ == null) {
-          linkId_ = builderForValue.build();
+      public Builder setSliceStatus(
+          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdBuilder_.setMessage(builderForValue.build());
+          sliceStatusBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (linkId_ != null) {
-            linkId_ =
-              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
+      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
+        if (sliceStatusBuilder_ == null) {
+          if (sliceStatus_ != null) {
+            sliceStatus_ =
+              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
           } else {
-            linkId_ = value;
+            sliceStatus_ = value;
           }
           onChanged();
         } else {
-          linkIdBuilder_.mergeFrom(value);
+          sliceStatusBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public Builder clearLinkId() {
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
+      public Builder clearSliceStatus() {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatus_ = null;
           onChanged();
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          sliceStatus_ = null;
+          sliceStatusBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 1;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+      public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
         
         onChanged();
-        return getLinkIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-        if (linkIdBuilder_ != null) {
-          return linkIdBuilder_.getMessageOrBuilder();
-        } else {
-          return linkId_ == null ?
-              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        }
-      }
-      /**
-       * <code>.context.LinkId link_id = 1;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdFieldBuilder() {
-        if (linkIdBuilder_ == null) {
-          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  getLinkId(),
-                  getParentForChildren(),
-                  isClean());
-          linkId_ = null;
-        }
-        return linkIdBuilder_;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> linkEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensureLinkEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
+        return getSliceStatusFieldBuilder().getBuilder();
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> linkEndpointIdsBuilder_;
-
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
-        if (linkEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+      public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
+        if (sliceStatusBuilder_ != null) {
+          return sliceStatusBuilder_.getMessageOrBuilder();
         } else {
-          return linkEndpointIdsBuilder_.getMessageList();
+          return sliceStatus_ == null ?
+              context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceStatus slice_status = 6;</code>
        */
-      public int getLinkEndpointIdsCount() {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.size();
-        } else {
-          return linkEndpointIdsBuilder_.getCount();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> 
+          getSliceStatusFieldBuilder() {
+        if (sliceStatusBuilder_ == null) {
+          sliceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder>(
+                  getSliceStatus(),
+                  getParentForChildren(),
+                  isClean());
+          sliceStatus_ = null;
         }
+        return sliceStatusBuilder_;
+      }
+
+      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>
+       * @return Whether the sliceOwner field is set.
+       */
+      public boolean hasSliceOwner() {
+        return sliceOwnerBuilder_ != null || sliceOwner_ != null;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
+       * @return The sliceOwner.
        */
-      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.get(index);
+      public context.ContextOuterClass.SliceOwner getSliceOwner() {
+        if (sliceOwnerBuilder_ == null) {
+          return sliceOwner_ == null ? context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
         } else {
-          return linkEndpointIdsBuilder_.getMessage(index);
+          return sliceOwnerBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
        */
-      public Builder setLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
+      public Builder setSliceOwner(context.ContextOuterClass.SliceOwner value) {
+        if (sliceOwnerBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.set(index, value);
+          sliceOwner_ = value;
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.setMessage(index, value);
+          sliceOwnerBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
        */
-      public Builder setLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.set(index, builderForValue.build());
+      public Builder setSliceOwner(
+          context.ContextOuterClass.SliceOwner.Builder builderForValue) {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = builderForValue.build();
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+          sliceOwnerBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
        */
-      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      public Builder mergeSliceOwner(context.ContextOuterClass.SliceOwner value) {
+        if (sliceOwnerBuilder_ == null) {
+          if (sliceOwner_ != null) {
+            sliceOwner_ =
+              context.ContextOuterClass.SliceOwner.newBuilder(sliceOwner_).mergeFrom(value).buildPartial();
+          } else {
+            sliceOwner_ = value;
           }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(value);
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(value);
+          sliceOwnerBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
        */
-      public Builder addLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (linkEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(index, value);
+      public Builder clearSliceOwner() {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwner_ = null;
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.addMessage(index, value);
+          sliceOwner_ = null;
+          sliceOwnerBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
        */
-      public Builder addLinkEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.SliceOwner.Builder getSliceOwnerBuilder() {
+        
+        onChanged();
+        return getSliceOwnerFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceOwner slice_owner = 7;</code>
+       */
+      public context.ContextOuterClass.SliceOwnerOrBuilder getSliceOwnerOrBuilder() {
+        if (sliceOwnerBuilder_ != null) {
+          return sliceOwnerBuilder_.getMessageOrBuilder();
         } else {
-          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
+          return sliceOwner_ == null ?
+              context.ContextOuterClass.SliceOwner.getDefaultInstance() : sliceOwner_;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.SliceOwner slice_owner = 7;</code>
        */
-      public Builder addLinkEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          linkEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder> 
+          getSliceOwnerFieldBuilder() {
+        if (sliceOwnerBuilder_ == null) {
+          sliceOwnerBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.SliceOwner, context.ContextOuterClass.SliceOwner.Builder, context.ContextOuterClass.SliceOwnerOrBuilder>(
+                  getSliceOwner(),
+                  getParentForChildren(),
+                  isClean());
+          sliceOwner_ = null;
         }
-        return this;
+        return sliceOwnerBuilder_;
       }
+
+      private context.ContextOuterClass.Timestamp timestamp_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Timestamp, context.ContextOuterClass.Timestamp.Builder, context.ContextOuterClass.TimestampOrBuilder> timestampBuilder_;
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
+       * @return Whether the timestamp field is set.
        */
-      public Builder addAllLinkEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkEndpointIds_);
-          onChanged();
+      public boolean hasTimestamp() {
+        return timestampBuilder_ != null || timestamp_ != null;
+      }
+      /**
+       * <code>.context.Timestamp timestamp = 8;</code>
+       * @return The timestamp.
+       */
+      public context.ContextOuterClass.Timestamp getTimestamp() {
+        if (timestampBuilder_ == null) {
+          return timestamp_ == null ? context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
         } else {
-          linkEndpointIdsBuilder_.addAllMessages(values);
+          return timestampBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public Builder clearLinkEndpointIds() {
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder setTimestamp(context.ContextOuterClass.Timestamp value) {
+        if (timestampBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          timestamp_ = value;
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.clear();
+          timestampBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public Builder removeLinkEndpointIds(int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          ensureLinkEndpointIdsIsMutable();
-          linkEndpointIds_.remove(index);
+      public Builder setTimestamp(
+          context.ContextOuterClass.Timestamp.Builder builderForValue) {
+        if (timestampBuilder_ == null) {
+          timestamp_ = builderForValue.build();
           onChanged();
         } else {
-          linkEndpointIdsBuilder_.remove(index);
+          timestampBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getLinkEndpointIdsBuilder(
-          int index) {
-        return getLinkEndpointIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
-          int index) {
-        if (linkEndpointIdsBuilder_ == null) {
-          return linkEndpointIds_.get(index);  } else {
-          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
+      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>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getLinkEndpointIdsOrBuilderList() {
-        if (linkEndpointIdsBuilder_ != null) {
-          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearTimestamp() {
+        if (timestampBuilder_ == null) {
+          timestamp_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+          timestamp_ = null;
+          timestampBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
-        return getLinkEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.Timestamp.Builder getTimestampBuilder() {
+        
+        onChanged();
+        return getTimestampFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
-          int index) {
-        return getLinkEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      public context.ContextOuterClass.TimestampOrBuilder getTimestampOrBuilder() {
+        if (timestampBuilder_ != null) {
+          return timestampBuilder_.getMessageOrBuilder();
+        } else {
+          return timestamp_ == null ?
+              context.ContextOuterClass.Timestamp.getDefaultInstance() : timestamp_;
+        }
       }
       /**
-       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       * <code>.context.Timestamp timestamp = 8;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getLinkEndpointIdsBuilderList() {
-        return getLinkEndpointIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getLinkEndpointIdsFieldBuilder() {
-        if (linkEndpointIdsBuilder_ == null) {
-          linkEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  linkEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      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());
-          linkEndpointIds_ = null;
+          timestamp_ = null;
         }
-        return linkEndpointIdsBuilder_;
+        return timestampBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -18897,95 +32314,98 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Link)
+      // @@protoc_insertion_point(builder_scope:context.Slice)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Link)
-    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Slice)
+    private static final context.ContextOuterClass.Slice DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Slice();
     }
 
-    public static context.ContextOuterClass.Link getDefaultInstance() {
+    public static context.ContextOuterClass.Slice getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Link>
-        PARSER = new com.google.protobuf.AbstractParser<Link>() {
+    private static final com.google.protobuf.Parser<Slice>
+        PARSER = new com.google.protobuf.AbstractParser<Slice>() {
       @java.lang.Override
-      public Link parsePartialFrom(
+      public Slice parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Link(input, extensionRegistry);
+        return new Slice(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Link> parser() {
+    public static com.google.protobuf.Parser<Slice> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Link> getParserForType() {
+    public com.google.protobuf.Parser<Slice> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Link getDefaultInstanceForType() {
+    public context.ContextOuterClass.Slice getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
+  public interface SliceOwnerOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceOwner)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return Whether the ownerUuid field is set.
      */
-    java.util.List<context.ContextOuterClass.LinkId> 
-        getLinkIdsList();
+    boolean hasOwnerUuid();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return The ownerUuid.
      */
-    context.ContextOuterClass.LinkId getLinkIds(int index);
+    context.ContextOuterClass.Uuid getOwnerUuid();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
      */
-    int getLinkIdsCount();
+    context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder();
+
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The ownerString.
      */
-    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList();
+    java.lang.String getOwnerString();
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The bytes for ownerString.
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getOwnerStringBytes();
   }
   /**
-   * Protobuf type {@code context.LinkIdList}
+   * Protobuf type {@code context.SliceOwner}
    */
-  public static final class LinkIdList extends
+  public static final class SliceOwner extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkIdList)
-      LinkIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceOwner)
+      SliceOwnerOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkIdList.newBuilder() to construct.
-    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceOwner.newBuilder() to construct.
+    private SliceOwner(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkIdList() {
-      linkIds_ = java.util.Collections.emptyList();
+    private SliceOwner() {
+      ownerString_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkIdList();
+      return new SliceOwner();
     }
 
     @java.lang.Override
@@ -18993,7 +32413,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkIdList(
+    private SliceOwner(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -19001,7 +32421,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 {
@@ -19013,12 +32432,22 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
-                mutable_bitField0_ |= 0x00000001;
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (ownerUuid_ != null) {
+                subBuilder = ownerUuid_.toBuilder();
               }
-              linkIds_.add(
-                  input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry));
+              ownerUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(ownerUuid_);
+                ownerUuid_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              ownerString_ = s;
               break;
             }
             default: {
@@ -19036,64 +32465,85 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+              context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
     }
 
-    public static final int LINK_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    public static final int OWNER_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid ownerUuid_;
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return Whether the ownerUuid field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-      return linkIds_;
+    public boolean hasOwnerUuid() {
+      return ownerUuid_ != null;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
+     * @return The ownerUuid.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-        getLinkIdsOrBuilderList() {
-      return linkIds_;
+    public context.ContextOuterClass.Uuid getOwnerUuid() {
+      return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>.context.Uuid owner_uuid = 1;</code>
      */
     @java.lang.Override
-    public int getLinkIdsCount() {
-      return linkIds_.size();
+    public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
+      return getOwnerUuid();
     }
+
+    public static final int OWNER_STRING_FIELD_NUMBER = 2;
+    private volatile java.lang.Object ownerString_;
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The ownerString.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkIds(int index) {
-      return linkIds_.get(index);
+    public java.lang.String getOwnerString() {
+      java.lang.Object ref = ownerString_;
+      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();
+        ownerString_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.LinkId link_ids = 1;</code>
+     * <code>string owner_string = 2;</code>
+     * @return The bytes for ownerString.
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-        int index) {
-      return linkIds_.get(index);
+    public com.google.protobuf.ByteString
+        getOwnerStringBytes() {
+      java.lang.Object ref = ownerString_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        ownerString_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -19110,8 +32560,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 < linkIds_.size(); i++) {
-        output.writeMessage(1, linkIds_.get(i));
+      if (ownerUuid_ != null) {
+        output.writeMessage(1, getOwnerUuid());
+      }
+      if (!getOwnerStringBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ownerString_);
       }
       unknownFields.writeTo(output);
     }
@@ -19122,9 +32575,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < linkIds_.size(); i++) {
+      if (ownerUuid_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, linkIds_.get(i));
+          .computeMessageSize(1, getOwnerUuid());
+      }
+      if (!getOwnerStringBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ownerString_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -19136,13 +32592,18 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceOwner)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
+      context.ContextOuterClass.SliceOwner other = (context.ContextOuterClass.SliceOwner) obj;
 
-      if (!getLinkIdsList()
-          .equals(other.getLinkIdsList())) return false;
+      if (hasOwnerUuid() != other.hasOwnerUuid()) return false;
+      if (hasOwnerUuid()) {
+        if (!getOwnerUuid()
+            .equals(other.getOwnerUuid())) return false;
+      }
+      if (!getOwnerString()
+          .equals(other.getOwnerString())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -19154,78 +32615,80 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getLinkIdsCount() > 0) {
-        hash = (37 * hash) + LINK_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkIdsList().hashCode();
+      if (hasOwnerUuid()) {
+        hash = (37 * hash) + OWNER_UUID_FIELD_NUMBER;
+        hash = (53 * hash) + getOwnerUuid().hashCode();
       }
+      hash = (37 * hash) + OWNER_STRING_FIELD_NUMBER;
+      hash = (53 * hash) + getOwnerString().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner 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.LinkIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceOwner parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceOwner parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner 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.LinkIdList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceOwner parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceOwner 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.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkIdList parseFrom(
+    public static context.ContextOuterClass.SliceOwner parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -19238,7 +32701,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceOwner prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -19254,26 +32717,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkIdList}
+     * Protobuf type {@code context.SliceOwner}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkIdList)
-        context.ContextOuterClass.LinkIdListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceOwner)
+        context.ContextOuterClass.SliceOwnerOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceOwner_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+                context.ContextOuterClass.SliceOwner.class, context.ContextOuterClass.SliceOwner.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceOwner.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -19286,35 +32749,36 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinkIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = null;
         } else {
-          linkIdsBuilder_.clear();
+          ownerUuid_ = null;
+          ownerUuidBuilder_ = null;
         }
+        ownerString_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceOwner_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
+      public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceOwner.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList build() {
-        context.ContextOuterClass.LinkIdList result = buildPartial();
+      public context.ContextOuterClass.SliceOwner build() {
+        context.ContextOuterClass.SliceOwner result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -19322,18 +32786,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkIdList buildPartial() {
-        context.ContextOuterClass.LinkIdList result = new context.ContextOuterClass.LinkIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (linkIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            linkIds_ = java.util.Collections.unmodifiableList(linkIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.linkIds_ = linkIds_;
+      public context.ContextOuterClass.SliceOwner buildPartial() {
+        context.ContextOuterClass.SliceOwner result = new context.ContextOuterClass.SliceOwner(this);
+        if (ownerUuidBuilder_ == null) {
+          result.ownerUuid_ = ownerUuid_;
         } else {
-          result.linkIds_ = linkIdsBuilder_.build();
+          result.ownerUuid_ = ownerUuidBuilder_.build();
         }
+        result.ownerString_ = ownerString_;
         onBuilt();
         return result;
       }
@@ -19372,41 +32832,22 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkIdList) {
-          return mergeFrom((context.ContextOuterClass.LinkIdList)other);
+        if (other instanceof context.ContextOuterClass.SliceOwner) {
+          return mergeFrom((context.ContextOuterClass.SliceOwner)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkIdList other) {
-        if (other == context.ContextOuterClass.LinkIdList.getDefaultInstance()) return this;
-        if (linkIdsBuilder_ == null) {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIds_.isEmpty()) {
-              linkIds_ = other.linkIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLinkIdsIsMutable();
-              linkIds_.addAll(other.linkIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.linkIds_.isEmpty()) {
-            if (linkIdsBuilder_.isEmpty()) {
-              linkIdsBuilder_.dispose();
-              linkIdsBuilder_ = null;
-              linkIds_ = other.linkIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              linkIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinkIdsFieldBuilder() : null;
-            } else {
-              linkIdsBuilder_.addAllMessages(other.linkIds_);
-            }
-          }
+      public Builder mergeFrom(context.ContextOuterClass.SliceOwner other) {
+        if (other == context.ContextOuterClass.SliceOwner.getDefaultInstance()) return this;
+        if (other.hasOwnerUuid()) {
+          mergeOwnerUuid(other.getOwnerUuid());
+        }
+        if (!other.getOwnerString().isEmpty()) {
+          ownerString_ = other.ownerString_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -19423,11 +32864,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkIdList parsedMessage = null;
+        context.ContextOuterClass.SliceOwner parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceOwner) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -19436,246 +32877,200 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.LinkId> linkIds_ =
-        java.util.Collections.emptyList();
-      private void ensureLinkIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>(linkIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdsBuilder_;
 
+      private context.ContextOuterClass.Uuid ownerUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> ownerUuidBuilder_;
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
-        if (linkIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(linkIds_);
-        } else {
-          return linkIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public int getLinkIdsCount() {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.size();
-        } else {
-          return linkIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public context.ContextOuterClass.LinkId getLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);
-        } else {
-          return linkIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, value);
-          onChanged();
-        } else {
-          linkIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       * @return Whether the ownerUuid field is set.
        */
-      public Builder setLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          linkIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      public boolean hasOwnerUuid() {
+        return ownerUuidBuilder_ != null || ownerUuid_ != null;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       * @return The ownerUuid.
        */
-      public Builder addLinkIds(context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(value);
-          onChanged();
+      public context.ContextOuterClass.Uuid getOwnerUuid() {
+        if (ownerUuidBuilder_ == null) {
+          return ownerUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
         } else {
-          linkIdsBuilder_.addMessage(value);
+          return ownerUuidBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId value) {
-        if (linkIdsBuilder_ == null) {
+      public Builder setOwnerUuid(context.ContextOuterClass.Uuid value) {
+        if (ownerUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, value);
-          onChanged();
-        } else {
-          linkIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public Builder addLinkIds(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          linkIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public Builder addLinkIds(
-          int index, context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.add(index, builderForValue.build());
+          ownerUuid_ = value;
           onChanged();
         } else {
-          linkIdsBuilder_.addMessage(index, builderForValue.build());
+          ownerUuidBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
-       */
-      public Builder addAllLinkIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.LinkId> values) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, linkIds_);
+       * <code>.context.Uuid owner_uuid = 1;</code>
+       */
+      public Builder setOwnerUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = builderForValue.build();
           onChanged();
         } else {
-          linkIdsBuilder_.addAllMessages(values);
+          ownerUuidBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder clearLinkIds() {
-        if (linkIdsBuilder_ == null) {
-          linkIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      public Builder mergeOwnerUuid(context.ContextOuterClass.Uuid value) {
+        if (ownerUuidBuilder_ == null) {
+          if (ownerUuid_ != null) {
+            ownerUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(ownerUuid_).mergeFrom(value).buildPartial();
+          } else {
+            ownerUuid_ = value;
+          }
           onChanged();
         } else {
-          linkIdsBuilder_.clear();
+          ownerUuidBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public Builder removeLinkIds(int index) {
-        if (linkIdsBuilder_ == null) {
-          ensureLinkIdsIsMutable();
-          linkIds_.remove(index);
+      public Builder clearOwnerUuid() {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuid_ = null;
           onChanged();
         } else {
-          linkIdsBuilder_.remove(index);
+          ownerUuid_ = null;
+          ownerUuidBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().getBuilder(index);
+      public context.ContextOuterClass.Uuid.Builder getOwnerUuidBuilder() {
+        
+        onChanged();
+        return getOwnerUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
-          int index) {
-        if (linkIdsBuilder_ == null) {
-          return linkIds_.get(index);  } else {
-          return linkIdsBuilder_.getMessageOrBuilder(index);
+      public context.ContextOuterClass.UuidOrBuilder getOwnerUuidOrBuilder() {
+        if (ownerUuidBuilder_ != null) {
+          return ownerUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return ownerUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : ownerUuid_;
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>.context.Uuid owner_uuid = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
-           getLinkIdsOrBuilderList() {
-        if (linkIdsBuilder_ != null) {
-          return linkIdsBuilder_.getMessageOrBuilderList();
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getOwnerUuidFieldBuilder() {
+        if (ownerUuidBuilder_ == null) {
+          ownerUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getOwnerUuid(),
+                  getParentForChildren(),
+                  isClean());
+          ownerUuid_ = null;
+        }
+        return ownerUuidBuilder_;
+      }
+
+      private java.lang.Object ownerString_ = "";
+      /**
+       * <code>string owner_string = 2;</code>
+       * @return The ownerString.
+       */
+      public java.lang.String getOwnerString() {
+        java.lang.Object ref = ownerString_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          ownerString_ = s;
+          return s;
         } else {
-          return java.util.Collections.unmodifiableList(linkIds_);
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>string owner_string = 2;</code>
+       * @return The bytes for ownerString.
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
-        return getLinkIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.LinkId.getDefaultInstance());
+      public com.google.protobuf.ByteString
+          getOwnerStringBytes() {
+        java.lang.Object ref = ownerString_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          ownerString_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>string owner_string = 2;</code>
+       * @param value The ownerString to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
-          int index) {
-        return getLinkIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      public Builder setOwnerString(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        ownerString_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.LinkId link_ids = 1;</code>
+       * <code>string owner_string = 2;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.LinkId.Builder> 
-           getLinkIdsBuilderList() {
-        return getLinkIdsFieldBuilder().getBuilderList();
+      public Builder clearOwnerString() {
+        
+        ownerString_ = getDefaultInstance().getOwnerString();
+        onChanged();
+        return this;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdsFieldBuilder() {
-        if (linkIdsBuilder_ == null) {
-          linkIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  linkIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          linkIds_ = null;
-        }
-        return linkIdsBuilder_;
+      /**
+       * <code>string owner_string = 2;</code>
+       * @param value The bytes for ownerString to set.
+       * @return This builder for chaining.
+       */
+      public Builder setOwnerStringBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        ownerString_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -19690,95 +33085,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkIdList)
+      // @@protoc_insertion_point(builder_scope:context.SliceOwner)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkIdList)
-    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceOwner)
+    private static final context.ContextOuterClass.SliceOwner DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceOwner();
     }
 
-    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceOwner getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkIdList>
-        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
+    private static final com.google.protobuf.Parser<SliceOwner>
+        PARSER = new com.google.protobuf.AbstractParser<SliceOwner>() {
       @java.lang.Override
-      public LinkIdList parsePartialFrom(
+      public SliceOwner parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkIdList(input, extensionRegistry);
+        return new SliceOwner(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkIdList> parser() {
+    public static com.google.protobuf.Parser<SliceOwner> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
+    public com.google.protobuf.Parser<SliceOwner> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceOwner getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkList)
+  public interface SliceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceStatus)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Link links = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Link> 
-        getLinksList();
-    /**
-     * <code>repeated .context.Link links = 1;</code>
-     */
-    context.ContextOuterClass.Link getLinks(int index);
-    /**
-     * <code>repeated .context.Link links = 1;</code>
-     */
-    int getLinksCount();
-    /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The enum numeric value on the wire for sliceStatus.
      */
-    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-        getLinksOrBuilderList();
+    int getSliceStatusValue();
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The sliceStatus.
      */
-    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
-        int index);
+    context.ContextOuterClass.SliceStatusEnum getSliceStatus();
   }
   /**
-   * Protobuf type {@code context.LinkList}
+   * Protobuf type {@code context.SliceStatus}
    */
-  public static final class LinkList extends
+  public static final class SliceStatus extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkList)
-      LinkListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceStatus)
+      SliceStatusOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkList.newBuilder() to construct.
-    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceStatus.newBuilder() to construct.
+    private SliceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkList() {
-      links_ = java.util.Collections.emptyList();
+    private SliceStatus() {
+      sliceStatus_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkList();
+      return new SliceStatus();
     }
 
     @java.lang.Override
@@ -19786,7 +33168,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkList(
+    private SliceStatus(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -19794,7 +33176,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 {
@@ -19805,13 +33186,10 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              links_.add(
-                  input.readMessage(context.ContextOuterClass.Link.parser(), extensionRegistry));
+            case 8: {
+              int rawValue = input.readEnum();
+
+              sliceStatus_ = rawValue;
               break;
             }
             default: {
@@ -19829,64 +33207,40 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          links_ = java.util.Collections.unmodifiableList(links_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+              context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
     }
 
-    public static final int LINKS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Link> links_;
-    /**
-     * <code>repeated .context.Link links = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Link> getLinksList() {
-      return links_;
-    }
-    /**
-     * <code>repeated .context.Link links = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-        getLinksOrBuilderList() {
-      return links_;
-    }
-    /**
-     * <code>repeated .context.Link links = 1;</code>
-     */
-    @java.lang.Override
-    public int getLinksCount() {
-      return links_.size();
-    }
+    public static final int SLICE_STATUS_FIELD_NUMBER = 1;
+    private int sliceStatus_;
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The enum numeric value on the wire for sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.Link getLinks(int index) {
-      return links_.get(index);
+    @java.lang.Override public int getSliceStatusValue() {
+      return sliceStatus_;
     }
     /**
-     * <code>repeated .context.Link links = 1;</code>
+     * <code>.context.SliceStatusEnum slice_status = 1;</code>
+     * @return The sliceStatus.
      */
-    @java.lang.Override
-    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
-        int index) {
-      return links_.get(index);
+    @java.lang.Override public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+      return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -19903,8 +33257,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 < links_.size(); i++) {
-        output.writeMessage(1, links_.get(i));
+      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, sliceStatus_);
       }
       unknownFields.writeTo(output);
     }
@@ -19915,9 +33269,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < links_.size(); i++) {
+      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, links_.get(i));
+          .computeEnumSize(1, sliceStatus_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -19929,13 +33283,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkList)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceStatus)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
+      context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
 
-      if (!getLinksList()
-          .equals(other.getLinksList())) return false;
+      if (sliceStatus_ != other.sliceStatus_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -19947,78 +33300,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getLinksCount() > 0) {
-        hash = (37 * hash) + LINKS_FIELD_NUMBER;
-        hash = (53 * hash) + getLinksList().hashCode();
-      }
+      hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + sliceStatus_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         java.nio.ByteBuffer data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus 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.LinkList parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceStatus parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         byte[] data,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data, extensionRegistry);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceStatus parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus 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.LinkList parseDelimitedFrom(java.io.InputStream input)
+    public static context.ContextOuterClass.SliceStatus parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseDelimitedFrom(
+    public static context.ContextOuterClass.SliceStatus 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.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static context.ContextOuterClass.LinkList parseFrom(
+    public static context.ContextOuterClass.SliceStatus parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -20031,7 +33382,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceStatus prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -20047,26 +33398,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkList}
+     * Protobuf type {@code context.SliceStatus}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkList)
-        context.ContextOuterClass.LinkListOrBuilder {
+        // @@protoc_insertion_point(builder_implements:context.SliceStatus)
+        context.ContextOuterClass.SliceStatusOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceStatus_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+                context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkList.newBuilder()
+      // Construct using context.ContextOuterClass.SliceStatus.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -20079,35 +33430,30 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getLinksFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (linksBuilder_ == null) {
-          links_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          linksBuilder_.clear();
-        }
+        sliceStatus_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkList.getDefaultInstance();
+      public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceStatus.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList build() {
-        context.ContextOuterClass.LinkList result = buildPartial();
+      public context.ContextOuterClass.SliceStatus build() {
+        context.ContextOuterClass.SliceStatus result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -20115,18 +33461,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkList buildPartial() {
-        context.ContextOuterClass.LinkList result = new context.ContextOuterClass.LinkList(this);
-        int from_bitField0_ = bitField0_;
-        if (linksBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            links_ = java.util.Collections.unmodifiableList(links_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.links_ = links_;
-        } else {
-          result.links_ = linksBuilder_.build();
-        }
+      public context.ContextOuterClass.SliceStatus buildPartial() {
+        context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
+        result.sliceStatus_ = sliceStatus_;
         onBuilt();
         return result;
       }
@@ -20159,316 +33496,106 @@ 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.LinkList) {
-          return mergeFrom((context.ContextOuterClass.LinkList)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
-      }
-
-      public Builder mergeFrom(context.ContextOuterClass.LinkList other) {
-        if (other == context.ContextOuterClass.LinkList.getDefaultInstance()) return this;
-        if (linksBuilder_ == null) {
-          if (!other.links_.isEmpty()) {
-            if (links_.isEmpty()) {
-              links_ = other.links_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureLinksIsMutable();
-              links_.addAll(other.links_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.links_.isEmpty()) {
-            if (linksBuilder_.isEmpty()) {
-              linksBuilder_.dispose();
-              linksBuilder_ = null;
-              links_ = other.links_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              linksBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getLinksFieldBuilder() : null;
-            } else {
-              linksBuilder_.addAllMessages(other.links_);
-            }
-          }
-        }
-        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.LinkList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Link> links_ =
-        java.util.Collections.emptyList();
-      private void ensureLinksIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          links_ = new java.util.ArrayList<context.ContextOuterClass.Link>(links_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> linksBuilder_;
-
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Link> getLinksList() {
-        if (linksBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(links_);
-        } else {
-          return linksBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public int getLinksCount() {
-        if (linksBuilder_ == null) {
-          return links_.size();
-        } else {
-          return linksBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public context.ContextOuterClass.Link getLinks(int index) {
-        if (linksBuilder_ == null) {
-          return links_.get(index);
-        } else {
-          return linksBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder setLinks(
-          int index, context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinksIsMutable();
-          links_.set(index, value);
-          onChanged();
-        } else {
-          linksBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder setLinks(
-          int index, context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          linksBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder addLinks(context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinksIsMutable();
-          links_.add(value);
-          onChanged();
-        } else {
-          linksBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder addLinks(
-          int index, context.ContextOuterClass.Link value) {
-        if (linksBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureLinksIsMutable();
-          links_.add(index, value);
-          onChanged();
-        } else {
-          linksBuilder_.addMessage(index, value);
-        }
-        return this;
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder addLinks(
-          context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.add(builderForValue.build());
-          onChanged();
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.SliceStatus) {
+          return mergeFrom((context.ContextOuterClass.SliceStatus)other);
         } else {
-          linksBuilder_.addMessage(builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder addLinks(
-          int index, context.ContextOuterClass.Link.Builder builderForValue) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          linksBuilder_.addMessage(index, builderForValue.build());
+
+      public Builder mergeFrom(context.ContextOuterClass.SliceStatus other) {
+        if (other == context.ContextOuterClass.SliceStatus.getDefaultInstance()) return this;
+        if (other.sliceStatus_ != 0) {
+          setSliceStatusValue(other.getSliceStatusValue());
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder addAllLinks(
-          java.lang.Iterable<? extends context.ContextOuterClass.Link> values) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, links_);
-          onChanged();
-        } else {
-          linksBuilder_.addAllMessages(values);
-        }
-        return this;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public Builder clearLinks() {
-        if (linksBuilder_ == null) {
-          links_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          linksBuilder_.clear();
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.SliceStatus parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
         return this;
       }
+
+      private int sliceStatus_ = 0;
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return The enum numeric value on the wire for sliceStatus.
        */
-      public Builder removeLinks(int index) {
-        if (linksBuilder_ == null) {
-          ensureLinksIsMutable();
-          links_.remove(index);
-          onChanged();
-        } else {
-          linksBuilder_.remove(index);
-        }
-        return this;
+      @java.lang.Override public int getSliceStatusValue() {
+        return sliceStatus_;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @param value The enum numeric value on the wire for sliceStatus to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Link.Builder getLinksBuilder(
-          int index) {
-        return getLinksFieldBuilder().getBuilder(index);
+      public Builder setSliceStatusValue(int value) {
+        
+        sliceStatus_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return The sliceStatus.
        */
-      public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
-          int index) {
-        if (linksBuilder_ == null) {
-          return links_.get(index);  } else {
-          return linksBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
+        @SuppressWarnings("deprecation")
+        context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
+        return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @param value The sliceStatus to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
-           getLinksOrBuilderList() {
-        if (linksBuilder_ != null) {
-          return linksBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(links_);
+      public Builder setSliceStatus(context.ContextOuterClass.SliceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
         }
+        
+        sliceStatus_ = value.getNumber();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public context.ContextOuterClass.Link.Builder addLinksBuilder() {
-        return getLinksFieldBuilder().addBuilder(
-            context.ContextOuterClass.Link.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
-       */
-      public context.ContextOuterClass.Link.Builder addLinksBuilder(
-          int index) {
-        return getLinksFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Link.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Link links = 1;</code>
+       * <code>.context.SliceStatusEnum slice_status = 1;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.Link.Builder> 
-           getLinksBuilderList() {
-        return getLinksFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder> 
-          getLinksFieldBuilder() {
-        if (linksBuilder_ == null) {
-          linksBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Link, context.ContextOuterClass.Link.Builder, context.ContextOuterClass.LinkOrBuilder>(
-                  links_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          links_ = null;
-        }
-        return linksBuilder_;
+      public Builder clearSliceStatus() {
+        
+        sliceStatus_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -20483,100 +33610,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkList)
+      // @@protoc_insertion_point(builder_scope:context.SliceStatus)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkList)
-    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceStatus)
+    private static final context.ContextOuterClass.SliceStatus DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceStatus();
     }
 
-    public static context.ContextOuterClass.LinkList getDefaultInstance() {
+    public static context.ContextOuterClass.SliceStatus getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkList>
-        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
+    private static final com.google.protobuf.Parser<SliceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<SliceStatus>() {
       @java.lang.Override
-      public LinkList parsePartialFrom(
+      public SliceStatus parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkList(input, extensionRegistry);
+        return new SliceStatus(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkList> parser() {
+    public static com.google.protobuf.Parser<SliceStatus> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkList> getParserForType() {
+    public com.google.protobuf.Parser<SliceStatus> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface LinkEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
+  public interface SliceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
-     */
-    boolean hasEvent();
-    /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.Event getEvent();
+    java.util.List<context.ContextOuterClass.SliceId> 
+        getSliceIdsList();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
-
+    context.ContextOuterClass.SliceId getSliceIds(int index);
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return Whether the linkId field is set.
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    boolean hasLinkId();
+    int getSliceIdsCount();
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return The linkId.
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.LinkId getLinkId();
+    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList();
     /**
-     * <code>.context.LinkId link_id = 2;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
-    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+        int index);
   }
   /**
-   * Protobuf type {@code context.LinkEvent}
+   * Protobuf type {@code context.SliceIdList}
    */
-  public static final class LinkEvent extends
+  public static final class SliceIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.LinkEvent)
-      LinkEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceIdList)
+      SliceIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use LinkEvent.newBuilder() to construct.
-    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceIdList.newBuilder() to construct.
+    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private LinkEvent() {
+    private SliceIdList() {
+      sliceIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new LinkEvent();
+      return new SliceIdList();
     }
 
     @java.lang.Override
@@ -20584,7 +33706,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private LinkEvent(
+    private SliceIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -20592,6 +33714,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 {
@@ -20603,29 +33726,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.LinkId.Builder subBuilder = null;
-              if (linkId_ != null) {
-                subBuilder = linkId_.toBuilder();
-              }
-              linkId_ = input.readMessage(context.ContextOuterClass.LinkId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(linkId_);
-                linkId_ = subBuilder.buildPartial();
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
+                mutable_bitField0_ |= 0x00000001;
               }
-
+              sliceIds_.add(
+                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -20643,73 +33749,64 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_LinkEvent_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_LinkEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.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 SLICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+      return sliceIds_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+        getSliceIdsOrBuilderList() {
+      return sliceIds_;
     }
-
-    public static final int LINK_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.LinkId linkId_;
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return Whether the linkId field is set.
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public boolean hasLinkId() {
-      return linkId_ != null;
+    public int getSliceIdsCount() {
+      return sliceIds_.size();
     }
     /**
-     * <code>.context.LinkId link_id = 2;</code>
-     * @return The linkId.
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkId getLinkId() {
-      return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+    public context.ContextOuterClass.SliceId getSliceIds(int index) {
+      return sliceIds_.get(index);
     }
     /**
-     * <code>.context.LinkId link_id = 2;</code>
+     * <code>repeated .context.SliceId slice_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-      return getLinkId();
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+        int index) {
+      return sliceIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -20726,11 +33823,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 (linkId_ != null) {
-        output.writeMessage(2, getLinkId());
+      for (int i = 0; i < sliceIds_.size(); i++) {
+        output.writeMessage(1, sliceIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -20741,13 +33835,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
-      }
-      if (linkId_ != null) {
+      for (int i = 0; i < sliceIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getLinkId());
+          .computeMessageSize(1, sliceIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -20759,21 +33849,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.LinkEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) obj;
+      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
-      }
-      if (hasLinkId() != other.hasLinkId()) return false;
-      if (hasLinkId()) {
-        if (!getLinkId()
-            .equals(other.getLinkId())) return false;
-      }
+      if (!getSliceIdsList()
+          .equals(other.getSliceIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -20785,82 +33867,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 (hasLinkId()) {
-        hash = (37 * hash) + LINK_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getLinkId().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.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent 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.LinkEvent 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.LinkEvent 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.LinkEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.LinkEvent 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.LinkEvent 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.LinkEvent 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.LinkEvent 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.LinkEvent 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.LinkEvent 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.LinkEvent parseFrom(
+    public static context.ContextOuterClass.SliceIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -20873,7 +33951,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.LinkEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -20889,26 +33967,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.LinkEvent}
+     * Protobuf type {@code context.SliceIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.LinkEvent)
-        context.ContextOuterClass.LinkEventOrBuilder {
+        // @@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_LinkEvent_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_LinkEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.LinkEvent.newBuilder()
+      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -20921,22 +33999,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
-        } else {
-          event_ = null;
-          eventBuilder_ = null;
-        }
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          sliceIdsBuilder_.clear();
         }
         return this;
       }
@@ -20944,17 +34017,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceIdList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
+      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent build() {
-        context.ContextOuterClass.LinkEvent result = buildPartial();
+      public context.ContextOuterClass.SliceIdList build() {
+        context.ContextOuterClass.SliceIdList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -20962,17 +34035,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.LinkEvent buildPartial() {
-        context.ContextOuterClass.LinkEvent result = new context.ContextOuterClass.LinkEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
-        } else {
-          result.event_ = eventBuilder_.build();
-        }
-        if (linkIdBuilder_ == null) {
-          result.linkId_ = linkId_;
+      public context.ContextOuterClass.SliceIdList buildPartial() {
+        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (sliceIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.sliceIds_ = sliceIds_;
         } else {
-          result.linkId_ = linkIdBuilder_.build();
+          result.sliceIds_ = sliceIdsBuilder_.build();
         }
         onBuilt();
         return result;
@@ -21012,21 +34085,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.LinkEvent) {
-          return mergeFrom((context.ContextOuterClass.LinkEvent)other);
+        if (other instanceof context.ContextOuterClass.SliceIdList) {
+          return mergeFrom((context.ContextOuterClass.SliceIdList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.LinkEvent other) {
-        if (other == context.ContextOuterClass.LinkEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
-        }
-        if (other.hasLinkId()) {
-          mergeLinkId(other.getLinkId());
+      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 {
+              ensureSliceIdsIsMutable();
+              sliceIds_.addAll(other.sliceIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.sliceIds_.isEmpty()) {
+            if (sliceIdsBuilder_.isEmpty()) {
+              sliceIdsBuilder_.dispose();
+              sliceIdsBuilder_ = null;
+              sliceIds_ = other.sliceIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              sliceIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getSliceIdsFieldBuilder() : null;
+            } else {
+              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
+            }
+          }
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -21043,11 +34136,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.LinkEvent parsedMessage = null;
+        context.ContextOuterClass.SliceIdList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.LinkEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -21056,243 +34149,246 @@ public final class ContextOuterClass {
         }
         return this;
       }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+        java.util.Collections.emptyList();
+      private void ensureSliceIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
 
-      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.SliceId slice_ids = 1;</code>
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
+        if (sliceIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(sliceIds_);
+        } else {
+          return sliceIdsBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public int getSliceIdsCount() {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.size();
         } else {
-          return eventBuilder_.getMessage();
+          return sliceIdsBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public context.ContextOuterClass.SliceId getSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);
+        } else {
+          return sliceIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       */
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, value);
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          sliceIdsBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.set(index, builderForValue.build());
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          sliceIdsBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 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 addSliceIds(context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(value);
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          sliceIdsBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder addSliceIds(
+          int index, context.ContextOuterClass.SliceId value) {
+        if (sliceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, value);
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          sliceIdsBuilder_.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.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public Builder addSliceIds(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(builderForValue.build());
+          onChanged();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          sliceIdsBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>repeated .context.SliceId slice_ids = 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 addSliceIds(
+          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          sliceIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        return eventBuilder_;
-      }
-
-      private context.ContextOuterClass.LinkId linkId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> linkIdBuilder_;
-      /**
-       * <code>.context.LinkId link_id = 2;</code>
-       * @return Whether the linkId field is set.
-       */
-      public boolean hasLinkId() {
-        return linkIdBuilder_ != null || linkId_ != null;
+        return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
-       * @return The linkId.
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkId getLinkId() {
-        if (linkIdBuilder_ == null) {
-          return linkId_ == null ? context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
+      public Builder addAllSliceIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, sliceIds_);
+          onChanged();
         } else {
-          return linkIdBuilder_.getMessage();
+          sliceIdsBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          linkId_ = value;
+      public Builder clearSliceIds() {
+        if (sliceIdsBuilder_ == null) {
+          sliceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          linkIdBuilder_.setMessage(value);
+          sliceIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder setLinkId(
-          context.ContextOuterClass.LinkId.Builder builderForValue) {
-        if (linkIdBuilder_ == null) {
-          linkId_ = builderForValue.build();
+      public Builder removeSliceIds(int index) {
+        if (sliceIdsBuilder_ == null) {
+          ensureSliceIdsIsMutable();
+          sliceIds_.remove(index);
           onChanged();
         } else {
-          linkIdBuilder_.setMessage(builderForValue.build());
+          sliceIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder mergeLinkId(context.ContextOuterClass.LinkId value) {
-        if (linkIdBuilder_ == null) {
-          if (linkId_ != null) {
-            linkId_ =
-              context.ContextOuterClass.LinkId.newBuilder(linkId_).mergeFrom(value).buildPartial();
-          } else {
-            linkId_ = value;
-          }
-          onChanged();
-        } else {
-          linkIdBuilder_.mergeFrom(value);
+      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
+          int index) {
+        return getSliceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       */
+      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
+          int index) {
+        if (sliceIdsBuilder_ == null) {
+          return sliceIds_.get(index);  } else {
+          return sliceIdsBuilder_.getMessageOrBuilder(index);
         }
-
-        return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public Builder clearLinkId() {
-        if (linkIdBuilder_ == null) {
-          linkId_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
+           getSliceIdsOrBuilderList() {
+        if (sliceIdsBuilder_ != null) {
+          return sliceIdsBuilder_.getMessageOrBuilderList();
         } else {
-          linkId_ = null;
-          linkIdBuilder_ = null;
+          return java.util.Collections.unmodifiableList(sliceIds_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
-        
-        onChanged();
-        return getLinkIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
+        return getSliceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
-        if (linkIdBuilder_ != null) {
-          return linkIdBuilder_.getMessageOrBuilder();
-        } else {
-          return linkId_ == null ?
-              context.ContextOuterClass.LinkId.getDefaultInstance() : linkId_;
-        }
+      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
+          int index) {
+        return getSliceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.SliceId.getDefaultInstance());
       }
       /**
-       * <code>.context.LinkId link_id = 2;</code>
+       * <code>repeated .context.SliceId slice_ids = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder> 
-          getLinkIdFieldBuilder() {
-        if (linkIdBuilder_ == null) {
-          linkIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.LinkId, context.ContextOuterClass.LinkId.Builder, context.ContextOuterClass.LinkIdOrBuilder>(
-                  getLinkId(),
+      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
+           getSliceIdsBuilderList() {
+        return getSliceIdsFieldBuilder().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_,
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          linkId_ = null;
+          sliceIds_ = null;
         }
-        return linkIdBuilder_;
+        return sliceIdsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -21307,104 +34403,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.LinkEvent)
+      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.LinkEvent)
-    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceIdList)
+    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
     }
 
-    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
+    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<LinkEvent>
-        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
+    private static final com.google.protobuf.Parser<SliceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceIdList>() {
       @java.lang.Override
-      public LinkEvent parsePartialFrom(
+      public SliceIdList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new LinkEvent(input, extensionRegistry);
+        return new SliceIdList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<LinkEvent> parser() {
+    public static com.google.protobuf.Parser<SliceIdList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
+    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceId)
+  public interface SliceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    boolean hasContextId();
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.ContextId getContextId();
+    java.util.List<context.ContextOuterClass.Slice> 
+        getSlicesList();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
-
+    context.ContextOuterClass.Slice getSlices(int index);
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return Whether the serviceUuid field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    boolean hasServiceUuid();
+    int getSlicesCount();
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return The serviceUuid.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.Uuid getServiceUuid();
+    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList();
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
+    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index);
   }
   /**
-   * <pre>
-   * ----- Service -------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ServiceId}
+   * Protobuf type {@code context.SliceList}
    */
-  public static final class ServiceId extends
+  public static final class SliceList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceId)
-      ServiceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceList)
+      SliceListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceId.newBuilder() to construct.
-    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceList.newBuilder() to construct.
+    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceId() {
+    private SliceList() {
+      slices_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceId();
+      return new SliceList();
     }
 
     @java.lang.Override
@@ -21412,7 +34499,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceId(
+    private SliceList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -21420,6 +34507,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 {
@@ -21431,29 +34519,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
-              }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
-              }
-
-              break;
-            }
-            case 18: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (serviceUuid_ != null) {
-                subBuilder = serviceUuid_.toBuilder();
-              }
-              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceUuid_);
-                serviceUuid_ = 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: {
@@ -21471,73 +34542,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_ServiceId_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_ServiceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
-    /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
-     */
-    @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
-    }
+    public static final int SLICES_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Slice> slices_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+      return slices_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+        getSlicesOrBuilderList() {
+      return slices_;
     }
-
-    public static final int SERVICE_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid serviceUuid_;
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return Whether the serviceUuid field is set.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public boolean hasServiceUuid() {
-      return serviceUuid_ != null;
+    public int getSlicesCount() {
+      return slices_.size();
     }
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
-     * @return The serviceUuid.
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getServiceUuid() {
-      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+    public context.ContextOuterClass.Slice getSlices(int index) {
+      return slices_.get(index);
     }
     /**
-     * <code>.context.Uuid service_uuid = 2;</code>
+     * <code>repeated .context.Slice slices = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-      return getServiceUuid();
+    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
+        int index) {
+      return slices_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -21554,11 +34616,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
-      }
-      if (serviceUuid_ != null) {
-        output.writeMessage(2, getServiceUuid());
+      for (int i = 0; i < slices_.size(); i++) {
+        output.writeMessage(1, slices_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -21569,13 +34628,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
-      }
-      if (serviceUuid_ != null) {
+      for (int i = 0; i < slices_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceUuid());
+          .computeMessageSize(1, slices_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -21587,21 +34642,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceId)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) obj;
+      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
-      }
-      if (hasServiceUuid() != other.hasServiceUuid()) return false;
-      if (hasServiceUuid()) {
-        if (!getServiceUuid()
-            .equals(other.getServiceUuid())) return false;
-      }
+      if (!getSlicesList()
+          .equals(other.getSlicesList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -21613,82 +34660,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
-      }
-      if (hasServiceUuid()) {
-        hash = (37 * hash) + SERVICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceUuid().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.ServiceId parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId 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.ServiceId 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.ServiceId 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.ServiceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceId 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.ServiceId 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.ServiceId 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.ServiceId 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.ServiceId 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.ServiceId 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.ServiceId parseFrom(
+    public static context.ContextOuterClass.SliceList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -21701,7 +34744,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -21717,30 +34760,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Service -------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ServiceId}
+     * Protobuf type {@code context.SliceList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceId)
-        context.ContextOuterClass.ServiceIdOrBuilder {
+        // @@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_ServiceId_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_ServiceId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceId.newBuilder()
+      // Construct using context.ContextOuterClass.SliceList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -21753,22 +34792,17 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
+          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
-        } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
-        }
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = null;
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          serviceUuid_ = null;
-          serviceUuidBuilder_ = null;
+          slicesBuilder_.clear();
         }
         return this;
       }
@@ -21776,17 +34810,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceId.getDefaultInstance();
+      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId build() {
-        context.ContextOuterClass.ServiceId result = buildPartial();
+      public context.ContextOuterClass.SliceList build() {
+        context.ContextOuterClass.SliceList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -21794,17 +34828,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceId buildPartial() {
-        context.ContextOuterClass.ServiceId result = new context.ContextOuterClass.ServiceId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
-        } else {
-          result.contextId_ = contextIdBuilder_.build();
-        }
-        if (serviceUuidBuilder_ == null) {
-          result.serviceUuid_ = serviceUuid_;
+      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.serviceUuid_ = serviceUuidBuilder_.build();
+          result.slices_ = slicesBuilder_.build();
         }
         onBuilt();
         return result;
@@ -21844,21 +34878,41 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceId) {
-          return mergeFrom((context.ContextOuterClass.ServiceId)other);
+        if (other instanceof context.ContextOuterClass.SliceList) {
+          return mergeFrom((context.ContextOuterClass.SliceList)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceId other) {
-        if (other == context.ContextOuterClass.ServiceId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (other.hasServiceUuid()) {
-          mergeServiceUuid(other.getServiceUuid());
+      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();
@@ -21875,11 +34929,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceId parsedMessage = null;
+        context.ContextOuterClass.SliceList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -21888,243 +34942,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.ContextId contextId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
+        if (slicesBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(slices_);
+        } else {
+          return slicesBuilder_.getMessageList();
+        }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public int getSlicesCount() {
+        if (slicesBuilder_ == null) {
+          return slices_.size();
         } else {
-          return contextIdBuilder_.getMessage();
+          return slicesBuilder_.getCount();
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == 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();
           }
-          contextId_ = value;
+          ensureSlicesIsMutable();
+          slices_.set(index, value);
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          slicesBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder setSlices(
+          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.set(index, builderForValue.build());
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
-          } else {
-            contextId_ = value;
+      public Builder addSlices(context.ContextOuterClass.Slice value) {
+        if (slicesBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
           }
+          ensureSlicesIsMutable();
+          slices_.add(value);
           onChanged();
         } else {
-          contextIdBuilder_.mergeFrom(value);
+          slicesBuilder_.addMessage(value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = 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 {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          slicesBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
-        
-        onChanged();
-        return getContextIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      public Builder addSlices(
+          context.ContextOuterClass.Slice.Builder builderForValue) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.add(builderForValue.build());
+          onChanged();
         } else {
-          return contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          slicesBuilder_.addMessage(builderForValue.build());
         }
+        return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
-                  getParentForChildren(),
-                  isClean());
-          contextId_ = 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 contextIdBuilder_;
-      }
-
-      private context.ContextOuterClass.Uuid serviceUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> serviceUuidBuilder_;
-      /**
-       * <code>.context.Uuid service_uuid = 2;</code>
-       * @return Whether the serviceUuid field is set.
-       */
-      public boolean hasServiceUuid() {
-        return serviceUuidBuilder_ != null || serviceUuid_ != null;
+        return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
-       * @return The serviceUuid.
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Uuid getServiceUuid() {
-        if (serviceUuidBuilder_ == null) {
-          return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+      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 serviceUuidBuilder_.getMessage();
+          slicesBuilder_.addAllMessages(values);
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
-        if (serviceUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceUuid_ = value;
+      public Builder clearSlices() {
+        if (slicesBuilder_ == null) {
+          slices_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          serviceUuidBuilder_.setMessage(value);
+          slicesBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder setServiceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = builderForValue.build();
+      public Builder removeSlices(int index) {
+        if (slicesBuilder_ == null) {
+          ensureSlicesIsMutable();
+          slices_.remove(index);
           onChanged();
         } else {
-          serviceUuidBuilder_.setMessage(builderForValue.build());
+          slicesBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder mergeServiceUuid(context.ContextOuterClass.Uuid value) {
-        if (serviceUuidBuilder_ == null) {
-          if (serviceUuid_ != null) {
-            serviceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(serviceUuid_).mergeFrom(value).buildPartial();
-          } else {
-            serviceUuid_ = value;
-          }
-          onChanged();
-        } else {
-          serviceUuidBuilder_.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.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public Builder clearServiceUuid() {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuid_ = null;
-          onChanged();
+      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
+           getSlicesOrBuilderList() {
+        if (slicesBuilder_ != null) {
+          return slicesBuilder_.getMessageOrBuilderList();
         } else {
-          serviceUuid_ = null;
-          serviceUuidBuilder_ = null;
+          return java.util.Collections.unmodifiableList(slices_);
         }
-
-        return this;
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
-        
-        onChanged();
-        return getServiceUuidFieldBuilder().getBuilder();
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
+        return getSlicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
-        if (serviceUuidBuilder_ != null) {
-          return serviceUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
-        }
+      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
+          int index) {
+        return getSlicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Slice.getDefaultInstance());
       }
       /**
-       * <code>.context.Uuid service_uuid = 2;</code>
+       * <code>repeated .context.Slice slices = 1;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getServiceUuidFieldBuilder() {
-        if (serviceUuidBuilder_ == null) {
-          serviceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getServiceUuid(),
+      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());
-          serviceUuid_ = null;
+          slices_ = null;
         }
-        return serviceUuidBuilder_;
+        return slicesBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -22139,177 +35196,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceId)
+      // @@protoc_insertion_point(builder_scope:context.SliceList)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceId)
-    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.SliceList)
+    private static final context.ContextOuterClass.SliceList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceList();
     }
 
-    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
+    public static context.ContextOuterClass.SliceList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceId>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
+    private static final com.google.protobuf.Parser<SliceList>
+        PARSER = new com.google.protobuf.AbstractParser<SliceList>() {
       @java.lang.Override
-      public ServiceId parsePartialFrom(
+      public SliceList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceId(input, extensionRegistry);
+        return new SliceList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceId> parser() {
+    public static com.google.protobuf.Parser<SliceList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceId> getParserForType() {
+    public com.google.protobuf.Parser<SliceList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
-    }
-
-  }
-
-  public interface ServiceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Service)
-      com.google.protobuf.MessageOrBuilder {
-
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return Whether the serviceId field is set.
-     */
-    boolean hasServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return The serviceId.
-     */
-    context.ContextOuterClass.ServiceId getServiceId();
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
-
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The enum numeric value on the wire for serviceType.
-     */
-    int getServiceTypeValue();
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The serviceType.
-     */
-    context.ContextOuterClass.ServiceTypeEnum getServiceType();
-
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getServiceEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointId getServiceEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    int getServiceEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getServiceEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-        int index);
+    }
 
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    java.util.List<context.ContextOuterClass.Constraint> 
-        getServiceConstraintsList();
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    context.ContextOuterClass.Constraint getServiceConstraints(int index);
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    int getServiceConstraintsCount();
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getServiceConstraintsOrBuilderList();
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-        int index);
+  }
+
+  public interface SliceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+      com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return Whether the serviceStatus field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
-    boolean hasServiceStatus();
+    boolean hasEvent();
     /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return The serviceStatus.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
-    context.ContextOuterClass.ServiceStatus getServiceStatus();
+    context.ContextOuterClass.Event getEvent();
     /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
+     * <code>.context.Event event = 1;</code>
      */
-    context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder();
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
 
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return Whether the serviceConfig field is set.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
      */
-    boolean hasServiceConfig();
+    boolean hasSliceId();
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return The serviceConfig.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
      */
-    context.ContextOuterClass.ServiceConfig getServiceConfig();
+    context.ContextOuterClass.SliceId getSliceId();
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
      */
-    context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder();
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Service}
+   * Protobuf type {@code context.SliceEvent}
    */
-  public static final class Service extends
+  public static final class SliceEvent extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Service)
-      ServiceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.SliceEvent)
+      SliceEventOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Service.newBuilder() to construct.
-    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use SliceEvent.newBuilder() to construct.
+    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Service() {
-      serviceType_ = 0;
-      serviceEndpointIds_ = java.util.Collections.emptyList();
-      serviceConstraints_ = java.util.Collections.emptyList();
+    private SliceEvent() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Service();
+      return new SliceEvent();
     }
 
     @java.lang.Override
@@ -22317,7 +35297,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Service(
+    private SliceEvent(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -22325,7 +35305,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 {
@@ -22337,64 +35316,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              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 16: {
-              int rawValue = input.readEnum();
-
-              serviceType_ = rawValue;
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              serviceEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              serviceConstraints_.add(
-                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              context.ContextOuterClass.ServiceStatus.Builder subBuilder = null;
-              if (serviceStatus_ != null) {
-                subBuilder = serviceStatus_.toBuilder();
+              context.ContextOuterClass.Event.Builder subBuilder = null;
+              if (event_ != null) {
+                subBuilder = event_.toBuilder();
               }
-              serviceStatus_ = input.readMessage(context.ContextOuterClass.ServiceStatus.parser(), extensionRegistry);
+              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceStatus_);
-                serviceStatus_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(event_);
+                event_ = subBuilder.buildPartial();
               }
 
               break;
             }
-            case 50: {
-              context.ContextOuterClass.ServiceConfig.Builder subBuilder = null;
-              if (serviceConfig_ != null) {
-                subBuilder = serviceConfig_.toBuilder();
+            case 18: {
+              context.ContextOuterClass.SliceId.Builder subBuilder = null;
+              if (sliceId_ != null) {
+                subBuilder = sliceId_.toBuilder();
               }
-              serviceConfig_ = input.readMessage(context.ContextOuterClass.ServiceConfig.parser(), extensionRegistry);
+              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(serviceConfig_);
-                serviceConfig_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(sliceId_);
+                sliceId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -22414,204 +35356,73 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Service_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_Service_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
-    }
-
-    public static final int SERVICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ServiceId serviceId_;
-    /**
-     * <code>.context.ServiceId service_id = 1;</code>
-     * @return Whether the serviceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasServiceId() {
-      return serviceId_ != null;
-    }
-    /**
-     * <code>.context.ServiceId service_id = 1;</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 = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-      return getServiceId();
-    }
-
-    public static final int SERVICE_TYPE_FIELD_NUMBER = 2;
-    private int serviceType_;
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The enum numeric value on the wire for serviceType.
-     */
-    @java.lang.Override public int getServiceTypeValue() {
-      return serviceType_;
-    }
-    /**
-     * <code>.context.ServiceTypeEnum service_type = 2;</code>
-     * @return The serviceType.
-     */
-    @java.lang.Override public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
-      return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
-    }
-
-    public static final int SERVICE_ENDPOINT_IDS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
-      return serviceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getServiceEndpointIdsOrBuilderList() {
-      return serviceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public int getServiceEndpointIdsCount() {
-      return serviceEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
-      return serviceEndpointIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-        int index) {
-      return serviceEndpointIds_.get(index);
-    }
-
-    public static final int SERVICE_CONSTRAINTS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_;
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
-      return serviceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getServiceConstraintsOrBuilderList() {
-      return serviceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public int getServiceConstraintsCount() {
-      return serviceConstraints_.size();
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
-      return serviceConstraints_.get(index);
-    }
-    /**
-     * <code>repeated .context.Constraint service_constraints = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-        int index) {
-      return serviceConstraints_.get(index);
+              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
     }
 
-    public static final int SERVICE_STATUS_FIELD_NUMBER = 5;
-    private context.ContextOuterClass.ServiceStatus serviceStatus_;
+    public static final int EVENT_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Event event_;
     /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return Whether the serviceStatus field is set.
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
      */
     @java.lang.Override
-    public boolean hasServiceStatus() {
-      return serviceStatus_ != null;
+    public boolean hasEvent() {
+      return event_ != null;
     }
     /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
-     * @return The serviceStatus.
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceStatus getServiceStatus() {
-      return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
     }
     /**
-     * <code>.context.ServiceStatus service_status = 5;</code>
+     * <code>.context.Event event = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-      return getServiceStatus();
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
     }
 
-    public static final int SERVICE_CONFIG_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.ServiceConfig serviceConfig_;
+    public static final int SLICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.SliceId sliceId_;
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return Whether the serviceConfig field is set.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return Whether the sliceId field is set.
      */
     @java.lang.Override
-    public boolean hasServiceConfig() {
-      return serviceConfig_ != null;
+    public boolean hasSliceId() {
+      return sliceId_ != null;
     }
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
-     * @return The serviceConfig.
+     * <code>.context.SliceId slice_id = 2;</code>
+     * @return The sliceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfig getServiceConfig() {
-      return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+    public context.ContextOuterClass.SliceId getSliceId() {
+      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
     }
     /**
-     * <code>.context.ServiceConfig service_config = 6;</code>
+     * <code>.context.SliceId slice_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-      return getServiceConfig();
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -22628,23 +35439,11 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (serviceId_ != null) {
-        output.writeMessage(1, getServiceId());
-      }
-      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
-        output.writeEnum(2, serviceType_);
-      }
-      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
-        output.writeMessage(3, serviceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < serviceConstraints_.size(); i++) {
-        output.writeMessage(4, serviceConstraints_.get(i));
-      }
-      if (serviceStatus_ != null) {
-        output.writeMessage(5, getServiceStatus());
+      if (event_ != null) {
+        output.writeMessage(1, getEvent());
       }
-      if (serviceConfig_ != null) {
-        output.writeMessage(6, getServiceConfig());
+      if (sliceId_ != null) {
+        output.writeMessage(2, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -22655,29 +35454,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (serviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getServiceId());
-      }
-      if (serviceType_ != context.ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(2, serviceType_);
-      }
-      for (int i = 0; i < serviceEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, serviceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < serviceConstraints_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, serviceConstraints_.get(i));
-      }
-      if (serviceStatus_ != null) {
+      if (event_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, getServiceStatus());
+          .computeMessageSize(1, getEvent());
       }
-      if (serviceConfig_ != null) {
+      if (sliceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getServiceConfig());
+          .computeMessageSize(2, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -22689,30 +35472,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Service)) {
+      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) obj;
+      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
 
-      if (hasServiceId() != other.hasServiceId()) return false;
-      if (hasServiceId()) {
-        if (!getServiceId()
-            .equals(other.getServiceId())) return false;
-      }
-      if (serviceType_ != other.serviceType_) return false;
-      if (!getServiceEndpointIdsList()
-          .equals(other.getServiceEndpointIdsList())) return false;
-      if (!getServiceConstraintsList()
-          .equals(other.getServiceConstraintsList())) return false;
-      if (hasServiceStatus() != other.hasServiceStatus()) return false;
-      if (hasServiceStatus()) {
-        if (!getServiceStatus()
-            .equals(other.getServiceStatus())) return false;
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
-      if (hasServiceConfig() != other.hasServiceConfig()) return false;
-      if (hasServiceConfig()) {
-        if (!getServiceConfig()
-            .equals(other.getServiceConfig())) 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;
@@ -22725,96 +35498,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().hashCode();
-      }
-      hash = (37 * hash) + SERVICE_TYPE_FIELD_NUMBER;
-      hash = (53 * hash) + serviceType_;
-      if (getServiceEndpointIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceEndpointIdsList().hashCode();
-      }
-      if (getServiceConstraintsCount() > 0) {
-        hash = (37 * hash) + SERVICE_CONSTRAINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceConstraintsList().hashCode();
-      }
-      if (hasServiceStatus()) {
-        hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceStatus().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
-      if (hasServiceConfig()) {
-        hash = (37 * hash) + SERVICE_CONFIG_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceConfig().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.Service parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service 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.Service 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.Service 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.Service parseFrom(byte[] data)
+    public static context.ContextOuterClass.SliceEvent parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Service 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.Service 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.Service 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.Service 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.Service 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.Service 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.Service parseFrom(
+    public static context.ContextOuterClass.SliceEvent parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -22827,7 +35586,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Service prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.SliceEvent prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -22843,26 +35602,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Service}
+     * Protobuf type {@code context.SliceEvent}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Service)
-        context.ContextOuterClass.ServiceOrBuilder {
+        // @@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_Service_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_Service_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_SliceEvent_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Service.newBuilder()
+      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -22875,44 +35634,22 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServiceEndpointIdsFieldBuilder();
-          getServiceConstraintsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
-        } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-        serviceType_ = 0;
-
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          serviceEndpointIdsBuilder_.clear();
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-        } else {
-          serviceConstraintsBuilder_.clear();
-        }
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = null;
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          serviceStatus_ = null;
-          serviceStatusBuilder_ = null;
+          event_ = null;
+          eventBuilder_ = null;
         }
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = null;
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
         } else {
-          serviceConfig_ = null;
-          serviceConfigBuilder_ = null;
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
         return this;
       }
@@ -22920,17 +35657,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+        return context.ContextOuterClass.internal_static_context_SliceEvent_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service getDefaultInstanceForType() {
-        return context.ContextOuterClass.Service.getDefaultInstance();
+      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service build() {
-        context.ContextOuterClass.Service result = buildPartial();
+      public context.ContextOuterClass.SliceEvent build() {
+        context.ContextOuterClass.SliceEvent result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -22938,42 +35675,17 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.Service buildPartial() {
-        context.ContextOuterClass.Service result = new context.ContextOuterClass.Service(this);
-        int from_bitField0_ = bitField0_;
-        if (serviceIdBuilder_ == null) {
-          result.serviceId_ = serviceId_;
-        } else {
-          result.serviceId_ = serviceIdBuilder_.build();
-        }
-        result.serviceType_ = serviceType_;
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            serviceEndpointIds_ = java.util.Collections.unmodifiableList(serviceEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.serviceEndpointIds_ = serviceEndpointIds_;
-        } else {
-          result.serviceEndpointIds_ = serviceEndpointIdsBuilder_.build();
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            serviceConstraints_ = java.util.Collections.unmodifiableList(serviceConstraints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.serviceConstraints_ = serviceConstraints_;
-        } else {
-          result.serviceConstraints_ = serviceConstraintsBuilder_.build();
-        }
-        if (serviceStatusBuilder_ == null) {
-          result.serviceStatus_ = serviceStatus_;
+      public context.ContextOuterClass.SliceEvent buildPartial() {
+        context.ContextOuterClass.SliceEvent result = new context.ContextOuterClass.SliceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          result.serviceStatus_ = serviceStatusBuilder_.build();
+          result.event_ = eventBuilder_.build();
         }
-        if (serviceConfigBuilder_ == null) {
-          result.serviceConfig_ = serviceConfig_;
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
         } else {
-          result.serviceConfig_ = serviceConfigBuilder_.build();
+          result.sliceId_ = sliceIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -23013,79 +35725,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Service) {
-          return mergeFrom((context.ContextOuterClass.Service)other);
+        if (other instanceof context.ContextOuterClass.SliceEvent) {
+          return mergeFrom((context.ContextOuterClass.SliceEvent)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.Service other) {
-        if (other == context.ContextOuterClass.Service.getDefaultInstance()) return this;
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
-        }
-        if (other.serviceType_ != 0) {
-          setServiceTypeValue(other.getServiceTypeValue());
-        }
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (!other.serviceEndpointIds_.isEmpty()) {
-            if (serviceEndpointIds_.isEmpty()) {
-              serviceEndpointIds_ = other.serviceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServiceEndpointIdsIsMutable();
-              serviceEndpointIds_.addAll(other.serviceEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceEndpointIds_.isEmpty()) {
-            if (serviceEndpointIdsBuilder_.isEmpty()) {
-              serviceEndpointIdsBuilder_.dispose();
-              serviceEndpointIdsBuilder_ = null;
-              serviceEndpointIds_ = other.serviceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              serviceEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceEndpointIdsFieldBuilder() : null;
-            } else {
-              serviceEndpointIdsBuilder_.addAllMessages(other.serviceEndpointIds_);
-            }
-          }
-        }
-        if (serviceConstraintsBuilder_ == null) {
-          if (!other.serviceConstraints_.isEmpty()) {
-            if (serviceConstraints_.isEmpty()) {
-              serviceConstraints_ = other.serviceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureServiceConstraintsIsMutable();
-              serviceConstraints_.addAll(other.serviceConstraints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceConstraints_.isEmpty()) {
-            if (serviceConstraintsBuilder_.isEmpty()) {
-              serviceConstraintsBuilder_.dispose();
-              serviceConstraintsBuilder_ = null;
-              serviceConstraints_ = other.serviceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              serviceConstraintsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceConstraintsFieldBuilder() : null;
-            } else {
-              serviceConstraintsBuilder_.addAllMessages(other.serviceConstraints_);
-            }
-          }
-        }
-        if (other.hasServiceStatus()) {
-          mergeServiceStatus(other.getServiceStatus());
+      public Builder mergeFrom(context.ContextOuterClass.SliceEvent other) {
+        if (other == context.ContextOuterClass.SliceEvent.getDefaultInstance()) return this;
+        if (other.hasEvent()) {
+          mergeEvent(other.getEvent());
         }
-        if (other.hasServiceConfig()) {
-          mergeServiceConfig(other.getServiceConfig());
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -23102,11 +35756,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.Service parsedMessage = null;
+        context.ContextOuterClass.SliceEvent parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -23115,897 +35769,872 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
 
-      private context.ContextOuterClass.ServiceId serviceId_;
+      private context.ContextOuterClass.Event event_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       * @return Whether the serviceId field is set.
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       * @return The serviceId.
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          return serviceIdBuilder_.getMessage();
+          return eventBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceId_ = value;
+          event_ = value;
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          eventBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          eventBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
+       * <code>.context.Event event = 1;</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 mergeEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (event_ != null) {
+            event_ =
+              context.ContextOuterClass.Event.newBuilder(event_).mergeFrom(value).buildPartial();
           } else {
-            serviceId_ = value;
+            event_ = value;
           }
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          eventBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 1;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
-        }
-
-        return this;
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
-        
-        onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceId service_id = 1;</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 = 1;</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;
+          event_ = null;
+          eventBuilder_ = null;
         }
-        return serviceIdBuilder_;
-      }
 
-      private int serviceType_ = 0;
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return The enum numeric value on the wire for serviceType.
-       */
-      @java.lang.Override public int getServiceTypeValue() {
-        return serviceType_;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @param value The enum numeric value on the wire for serviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setServiceTypeValue(int value) {
-        
-        serviceType_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return The serviceType.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceTypeEnum getServiceType() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ServiceTypeEnum result = context.ContextOuterClass.ServiceTypeEnum.valueOf(serviceType_);
-        return result == null ? context.ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED : result;
-      }
-      /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @param value The serviceType to set.
-       * @return This builder for chaining.
-       */
-      public Builder setServiceType(context.ContextOuterClass.ServiceTypeEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
-        
-        serviceType_ = value.getNumber();
-        onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceTypeEnum service_type = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearServiceType() {
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
         
-        serviceType_ = 0;
         onChanged();
-        return this;
-      }
-
-      private java.util.List<context.ContextOuterClass.EndPointId> serviceEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          serviceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(serviceEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> serviceEndpointIdsBuilder_;
-
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getServiceEndpointIdsList() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        } else {
-          return serviceEndpointIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public int getServiceEndpointIdsCount() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.size();
-        } else {
-          return serviceEndpointIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId getServiceEndpointIds(int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.get(index);
-        } else {
-          return serviceEndpointIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder setServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.set(index, value);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder setServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(value);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(index, value);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addServiceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder addAllServiceEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceEndpointIds_);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder clearServiceEndpointIds() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public Builder removeServiceEndpointIds(int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          ensureServiceEndpointIdsIsMutable();
-          serviceEndpointIds_.remove(index);
-          onChanged();
-        } else {
-          serviceEndpointIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getServiceEndpointIdsBuilder(
-          int index) {
-        return getServiceEndpointIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getServiceEndpointIdsOrBuilder(
-          int index) {
-        if (serviceEndpointIdsBuilder_ == null) {
-          return serviceEndpointIds_.get(index);  } else {
-          return serviceEndpointIdsBuilder_.getMessageOrBuilder(index);
-        }
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getServiceEndpointIdsOrBuilderList() {
-        if (serviceEndpointIdsBuilder_ != null) {
-          return serviceEndpointIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(serviceEndpointIds_);
-        }
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder() {
-        return getServiceEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addServiceEndpointIdsBuilder(
-          int index) {
-        return getServiceEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+        }
       }
       /**
-       * <code>repeated .context.EndPointId service_endpoint_ids = 3;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getServiceEndpointIdsBuilderList() {
-        return getServiceEndpointIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getServiceEndpointIdsFieldBuilder() {
-        if (serviceEndpointIdsBuilder_ == null) {
-          serviceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  serviceEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
+      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());
-          serviceEndpointIds_ = null;
+          event_ = null;
         }
-        return serviceEndpointIdsBuilder_;
+        return eventBuilder_;
       }
 
-      private java.util.List<context.ContextOuterClass.Constraint> serviceConstraints_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceConstraintsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          serviceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(serviceConstraints_);
-          bitField0_ |= 0x00000002;
-         }
+      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;
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> serviceConstraintsBuilder_;
-
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
+       * @return The sliceId.
        */
-      public java.util.List<context.ContextOuterClass.Constraint> getServiceConstraintsList() {
-        if (serviceConstraintsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceConstraints_);
+      public context.ContextOuterClass.SliceId getSliceId() {
+        if (sliceIdBuilder_ == null) {
+          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         } else {
-          return serviceConstraintsBuilder_.getMessageList();
+          return sliceIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public int getServiceConstraintsCount() {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.size();
+      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
+        if (sliceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          sliceId_ = value;
+          onChanged();
         } else {
-          return serviceConstraintsBuilder_.getCount();
+          sliceIdBuilder_.setMessage(value);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public context.ContextOuterClass.Constraint getServiceConstraints(int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.get(index);
+      public Builder setSliceId(
+          context.ContextOuterClass.SliceId.Builder builderForValue) {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = builderForValue.build();
+          onChanged();
         } else {
-          return serviceConstraintsBuilder_.getMessage(index);
+          sliceIdBuilder_.setMessage(builderForValue.build());
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder setServiceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+      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;
           }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.set(index, value);
           onChanged();
         } else {
-          serviceConstraintsBuilder_.setMessage(index, value);
+          sliceIdBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder setServiceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.set(index, builderForValue.build());
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
           onChanged();
         } else {
-          serviceConstraintsBuilder_.setMessage(index, builderForValue.build());
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       * <code>.context.SliceId slice_id = 2;</code>
        */
-      public Builder addServiceConstraints(context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(value);
-          onChanged();
+      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 {
-          serviceConstraintsBuilder_.addMessage(value);
+          return sliceId_ == null ?
+              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (serviceConstraintsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(index, value);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(index, value);
-        }
-        return this;
+      /**
+       * <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.SliceEvent)
+    private static final context.ContextOuterClass.SliceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceEvent();
+    }
+
+    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SliceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<SliceEvent>() {
+      @java.lang.Override
+      public SliceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SliceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SliceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
+     */
+    boolean hasConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
+     */
+    context.ContextOuterClass.Uuid getConnectionUuid();
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Connection ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ConnectionId}
+   */
+  public static final class ConnectionId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionId)
+      ConnectionIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionId.newBuilder() to construct.
+    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionId(
+        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 (connectionUuid_ != null) {
+                subBuilder = connectionUuid_.toBuilder();
+              }
+              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionUuid_);
+                connectionUuid_ = 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 context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+    }
+
+    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid connectionUuid_;
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return Whether the connectionUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionUuid() {
+      return connectionUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid connection_uuid = 1;</code>
+     * @return The connectionUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getConnectionUuid() {
+      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    }
+    /**
+     * <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;
+      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 (connectionUuid_ != null) {
+        output.writeMessage(1, getConnectionUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionUuid());
+      }
+      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.ConnectionId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+
+      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
+      if (hasConnectionUuid()) {
+        if (!getConnectionUuid()
+            .equals(other.getConnectionUuid())) 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 (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.ConnectionId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ConnectionId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ConnectionId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionId 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.ConnectionId 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;
+    }
+    /**
+     * <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.ConnectionId)
+        context.ContextOuterClass.ConnectionIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+
+      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addServiceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder addAllServiceConstraints(
-          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceConstraints_);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.addAllMessages(values);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder clearServiceConstraints() {
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
         } else {
-          serviceConstraintsBuilder_.clear();
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
         return this;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public Builder removeServiceConstraints(int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          ensureServiceConstraintsIsMutable();
-          serviceConstraints_.remove(index);
-          onChanged();
-        } else {
-          serviceConstraintsBuilder_.remove(index);
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
-          int index) {
-        return getServiceConstraintsFieldBuilder().getBuilder(index);
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.ConstraintOrBuilder getServiceConstraintsOrBuilder(
-          int index) {
-        if (serviceConstraintsBuilder_ == null) {
-          return serviceConstraints_.get(index);  } else {
-          return serviceConstraintsBuilder_.getMessageOrBuilder(index);
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-           getServiceConstraintsOrBuilderList() {
-        if (serviceConstraintsBuilder_ != null) {
-          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId buildPartial() {
+        context.ContextOuterClass.ConnectionId result = new context.ContextOuterClass.ConnectionId(this);
+        if (connectionUuidBuilder_ == null) {
+          result.connectionUuid_ = connectionUuid_;
         } else {
-          return java.util.Collections.unmodifiableList(serviceConstraints_);
+          result.connectionUuid_ = connectionUuidBuilder_.build();
         }
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
-        return getServiceConstraintsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Constraint.getDefaultInstance());
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
-          int index) {
-        return getServiceConstraintsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>repeated .context.Constraint service_constraints = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
-           getServiceConstraintsBuilderList() {
-        return getServiceConstraintsFieldBuilder().getBuilderList();
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
-          getServiceConstraintsFieldBuilder() {
-        if (serviceConstraintsBuilder_ == null) {
-          serviceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
-                  serviceConstraints_,
-                  ((bitField0_ & 0x00000002) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceConstraints_ = null;
-        }
-        return serviceConstraintsBuilder_;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-
-      private context.ContextOuterClass.ServiceStatus serviceStatus_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> serviceStatusBuilder_;
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       * @return Whether the serviceStatus field is set.
-       */
-      public boolean hasServiceStatus() {
-        return serviceStatusBuilder_ != null || serviceStatus_ != null;
+      @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>.context.ServiceStatus service_status = 5;</code>
-       * @return The serviceStatus.
-       */
-      public context.ContextOuterClass.ServiceStatus getServiceStatus() {
-        if (serviceStatusBuilder_ == null) {
-          return serviceStatus_ == null ? context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
-        } else {
-          return serviceStatusBuilder_.getMessage();
-        }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatus value) {
-        if (serviceStatusBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          serviceStatus_ = value;
-          onChanged();
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)other);
         } else {
-          serviceStatusBuilder_.setMessage(value);
+          super.mergeFrom(other);
+          return this;
         }
-
-        return this;
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder setServiceStatus(
-          context.ContextOuterClass.ServiceStatus.Builder builderForValue) {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = builderForValue.build();
-          onChanged();
-        } else {
-          serviceStatusBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder mergeServiceStatus(context.ContextOuterClass.ServiceStatus value) {
-        if (serviceStatusBuilder_ == null) {
-          if (serviceStatus_ != null) {
-            serviceStatus_ =
-              context.ContextOuterClass.ServiceStatus.newBuilder(serviceStatus_).mergeFrom(value).buildPartial();
-          } else {
-            serviceStatus_ = value;
-          }
-          onChanged();
-        } else {
-          serviceStatusBuilder_.mergeFrom(value);
+      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();
         return this;
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public Builder clearServiceStatus() {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatus_ = null;
-          onChanged();
-        } else {
-          serviceStatus_ = null;
-          serviceStatusBuilder_ = null;
-        }
 
-        return this;
-      }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public context.ContextOuterClass.ServiceStatus.Builder getServiceStatusBuilder() {
-        
-        onChanged();
-        return getServiceStatusFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      public context.ContextOuterClass.ServiceStatusOrBuilder getServiceStatusOrBuilder() {
-        if (serviceStatusBuilder_ != null) {
-          return serviceStatusBuilder_.getMessageOrBuilder();
-        } else {
-          return serviceStatus_ == null ?
-              context.ContextOuterClass.ServiceStatus.getDefaultInstance() : serviceStatus_;
-        }
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.ServiceStatus service_status = 5;</code>
-       */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder> 
-          getServiceStatusFieldBuilder() {
-        if (serviceStatusBuilder_ == null) {
-          serviceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceStatus, context.ContextOuterClass.ServiceStatus.Builder, context.ContextOuterClass.ServiceStatusOrBuilder>(
-                  getServiceStatus(),
-                  getParentForChildren(),
-                  isClean());
-          serviceStatus_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return serviceStatusBuilder_;
+        return this;
       }
 
-      private context.ContextOuterClass.ServiceConfig serviceConfig_;
+      private context.ContextOuterClass.Uuid connectionUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       * @return Whether the serviceConfig field is set.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
        */
-      public boolean hasServiceConfig() {
-        return serviceConfigBuilder_ != null || serviceConfig_ != null;
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
-       * @return The serviceConfig.
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
        */
-      public context.ContextOuterClass.ServiceConfig getServiceConfig() {
-        if (serviceConfigBuilder_ == null) {
-          return serviceConfig_ == null ? context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         } else {
-          return serviceConfigBuilder_.getMessage();
+          return connectionUuidBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
-        if (serviceConfigBuilder_ == null) {
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceConfig_ = value;
+          connectionUuid_ = value;
           onChanged();
         } else {
-          serviceConfigBuilder_.setMessage(value);
+          connectionUuidBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder setServiceConfig(
-          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = builderForValue.build();
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
           onChanged();
         } else {
-          serviceConfigBuilder_.setMessage(builderForValue.build());
+          connectionUuidBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder mergeServiceConfig(context.ContextOuterClass.ServiceConfig value) {
-        if (serviceConfigBuilder_ == null) {
-          if (serviceConfig_ != null) {
-            serviceConfig_ =
-              context.ContextOuterClass.ServiceConfig.newBuilder(serviceConfig_).mergeFrom(value).buildPartial();
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
           } else {
-            serviceConfig_ = value;
+            connectionUuid_ = value;
           }
           onChanged();
         } else {
-          serviceConfigBuilder_.mergeFrom(value);
+          connectionUuidBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public Builder clearServiceConfig() {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfig_ = null;
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
           onChanged();
         } else {
-          serviceConfig_ = null;
-          serviceConfigBuilder_ = null;
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.ServiceConfig.Builder getServiceConfigBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
         
         onChanged();
-        return getServiceConfigFieldBuilder().getBuilder();
+        return getConnectionUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
-      public context.ContextOuterClass.ServiceConfigOrBuilder getServiceConfigOrBuilder() {
-        if (serviceConfigBuilder_ != null) {
-          return serviceConfigBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
         } else {
-          return serviceConfig_ == null ?
-              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
         }
       }
       /**
-       * <code>.context.ServiceConfig service_config = 6;</code>
+       * <code>.context.Uuid connection_uuid = 1;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> 
-          getServiceConfigFieldBuilder() {
-        if (serviceConfigBuilder_ == null) {
-          serviceConfigBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder>(
-                  getServiceConfig(),
+          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());
-          serviceConfig_ = null;
+          connectionUuid_ = null;
         }
-        return serviceConfigBuilder_;
+        return connectionUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -24020,82 +36649,83 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Service)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Service)
-    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
     }
 
-    public static context.ContextOuterClass.Service getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Service>
-        PARSER = new com.google.protobuf.AbstractParser<Service>() {
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
       @java.lang.Override
-      public Service parsePartialFrom(
+      public ConnectionId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Service(input, extensionRegistry);
+        return new ConnectionId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Service> parser() {
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Service> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Service getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceStatusOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
+  public interface ConnectionSettings_L0OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L0)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The enum numeric value on the wire for serviceStatus.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    int getServiceStatusValue();
+    java.lang.String getLspSymbolicName();
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The serviceStatus.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
-    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
+    com.google.protobuf.ByteString
+        getLspSymbolicNameBytes();
   }
   /**
-   * Protobuf type {@code context.ServiceStatus}
+   * Protobuf type {@code context.ConnectionSettings_L0}
    */
-  public static final class ServiceStatus extends
+  public static final class ConnectionSettings_L0 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
-      ServiceStatusOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L0)
+      ConnectionSettings_L0OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceStatus.newBuilder() to construct.
-    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L0.newBuilder() to construct.
+    private ConnectionSettings_L0(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceStatus() {
-      serviceStatus_ = 0;
+    private ConnectionSettings_L0() {
+      lspSymbolicName_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceStatus();
+      return new ConnectionSettings_L0();
     }
 
     @java.lang.Override
@@ -24103,7 +36733,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceStatus(
+    private ConnectionSettings_L0(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -24121,10 +36751,10 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              java.lang.String s = input.readStringRequireUtf8();
 
-              serviceStatus_ = rawValue;
+              lspSymbolicName_ = s;
               break;
             }
             default: {
@@ -24148,34 +36778,53 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceStatus_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_ServiceStatus_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
     }
 
-    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
-    private int serviceStatus_;
+    public static final int LSP_SYMBOLIC_NAME_FIELD_NUMBER = 1;
+    private volatile java.lang.Object lspSymbolicName_;
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The enum numeric value on the wire for serviceStatus.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The lspSymbolicName.
      */
-    @java.lang.Override public int getServiceStatusValue() {
-      return serviceStatus_;
+    @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;
+      }
     }
     /**
-     * <code>.context.ServiceStatusEnum service_status = 1;</code>
-     * @return The serviceStatus.
+     * <code>string lsp_symbolic_name = 1;</code>
+     * @return The bytes for lspSymbolicName.
      */
-    @java.lang.Override public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
-      return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+    @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;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -24192,8 +36841,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(1, serviceStatus_);
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, lspSymbolicName_);
       }
       unknownFields.writeTo(output);
     }
@@ -24204,9 +36853,8 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, serviceStatus_);
+      if (!getLspSymbolicNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, lspSymbolicName_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -24218,12 +36866,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceStatus)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L0)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
+      context.ContextOuterClass.ConnectionSettings_L0 other = (context.ContextOuterClass.ConnectionSettings_L0) obj;
 
-      if (serviceStatus_ != other.serviceStatus_) return false;
+      if (!getLspSymbolicName()
+          .equals(other.getLspSymbolicName())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -24235,76 +36884,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SERVICE_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + serviceStatus_;
+      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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus 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.ServiceStatus parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L0 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -24317,7 +36966,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceStatus prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L0 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -24333,26 +36982,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceStatus}
+     * 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.ServiceStatus)
-        context.ContextOuterClass.ServiceStatusOrBuilder {
+        // @@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_ServiceStatus_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_ServiceStatus_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L0.class, context.ContextOuterClass.ConnectionSettings_L0.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceStatus.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L0.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -24370,7 +37019,7 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        serviceStatus_ = 0;
+        lspSymbolicName_ = "";
 
         return this;
       }
@@ -24378,17 +37027,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L0_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus build() {
-        context.ContextOuterClass.ServiceStatus result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L0 build() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -24396,9 +37045,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceStatus buildPartial() {
-        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
-        result.serviceStatus_ = serviceStatus_;
+      public context.ContextOuterClass.ConnectionSettings_L0 buildPartial() {
+        context.ContextOuterClass.ConnectionSettings_L0 result = new context.ContextOuterClass.ConnectionSettings_L0(this);
+        result.lspSymbolicName_ = lspSymbolicName_;
         onBuilt();
         return result;
       }
@@ -24437,18 +37086,19 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceStatus) {
-          return mergeFrom((context.ContextOuterClass.ServiceStatus)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.ServiceStatus other) {
-        if (other == context.ContextOuterClass.ServiceStatus.getDefaultInstance()) return this;
-        if (other.serviceStatus_ != 0) {
-          setServiceStatusValue(other.getServiceStatusValue());
+      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();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -24465,11 +37115,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceStatus parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L0 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L0) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -24479,56 +37129,78 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int serviceStatus_ = 0;
+      private java.lang.Object lspSymbolicName_ = "";
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @return The enum numeric value on the wire for serviceStatus.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The lspSymbolicName.
        */
-      @java.lang.Override public int getServiceStatusValue() {
-        return serviceStatus_;
+      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;
+        } else {
+          return (java.lang.String) ref;
+        }
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @param value The enum numeric value on the wire for serviceStatus to set.
-       * @return This builder for chaining.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @return The bytes for lspSymbolicName.
        */
-      public Builder setServiceStatusValue(int value) {
-        
-        serviceStatus_ = value;
-        onChanged();
-        return this;
+      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;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @return The serviceStatus.
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The lspSymbolicName to set.
+       * @return This builder for chaining.
        */
-      @java.lang.Override
-      public context.ContextOuterClass.ServiceStatusEnum getServiceStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ServiceStatusEnum result = context.ContextOuterClass.ServiceStatusEnum.valueOf(serviceStatus_);
-        return result == null ? context.ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED : result;
+      public Builder setLspSymbolicName(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        lspSymbolicName_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
-       * @param value The serviceStatus to set.
+       * <code>string lsp_symbolic_name = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
-        }
+      public Builder clearLspSymbolicName() {
         
-        serviceStatus_ = value.getNumber();
+        lspSymbolicName_ = getDefaultInstance().getLspSymbolicName();
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * <code>string lsp_symbolic_name = 1;</code>
+       * @param value The bytes for lspSymbolicName to set.
        * @return This builder for chaining.
        */
-      public Builder clearServiceStatus() {
+      public Builder setLspSymbolicNameBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
         
-        serviceStatus_ = 0;
+        lspSymbolicName_ = value;
         onChanged();
         return this;
       }
@@ -24545,95 +37217,120 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceStatus)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L0)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
-    private static final context.ContextOuterClass.ServiceStatus 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.ServiceStatus();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L0();
     }
 
-    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceStatus>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L0>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L0>() {
       @java.lang.Override
-      public ServiceStatus parsePartialFrom(
+      public ConnectionSettings_L0 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceStatus(input, extensionRegistry);
+        return new ConnectionSettings_L0(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceStatus> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L0> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L0> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L0 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceConfigOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
+  public interface ConnectionSettings_L2OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L2)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
-    java.util.List<context.ContextOuterClass.ConfigRule> 
-        getConfigRulesList();
+    java.lang.String getSrcMacAddress();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
-    context.ContextOuterClass.ConfigRule getConfigRules(int index);
+    com.google.protobuf.ByteString
+        getSrcMacAddressBytes();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
-    int getConfigRulesCount();
+    java.lang.String getDstMacAddress();
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
-    java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList();
+    com.google.protobuf.ByteString
+        getDstMacAddressBytes();
+
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
-    context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index);
+    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();
   }
   /**
-   * Protobuf type {@code context.ServiceConfig}
+   * Protobuf type {@code context.ConnectionSettings_L2}
    */
-  public static final class ServiceConfig extends
+  public static final class ConnectionSettings_L2 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
-      ServiceConfigOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L2)
+      ConnectionSettings_L2OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceConfig.newBuilder() to construct.
-    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L2.newBuilder() to construct.
+    private ConnectionSettings_L2(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceConfig() {
-      configRules_ = java.util.Collections.emptyList();
+    private ConnectionSettings_L2() {
+      srcMacAddress_ = "";
+      dstMacAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceConfig();
+      return new ConnectionSettings_L2();
     }
 
     @java.lang.Override
@@ -24641,7 +37338,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceConfig(
+    private ConnectionSettings_L2(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -24649,7 +37346,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 {
@@ -24661,12 +37357,35 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              configRules_.add(
-                  input.readMessage(context.ContextOuterClass.ConfigRule.parser(), extensionRegistry));
+              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();
               break;
             }
             default: {
@@ -24684,64 +37403,141 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          configRules_ = java.util.Collections.unmodifiableList(configRules_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceConfig_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_ServiceConfig_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
     }
 
-    public static final int CONFIG_RULES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ConfigRule> configRules_;
+    public static final int SRC_MAC_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcMacAddress_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string src_mac_address = 1;</code>
+     * @return The srcMacAddress.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-      return configRules_;
+    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();
+        srcMacAddress_ = s;
+        return s;
+      }
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string src_mac_address = 1;</code>
+     * @return The bytes for srcMacAddress.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-        getConfigRulesOrBuilderList() {
-      return configRules_;
+    public com.google.protobuf.ByteString
+        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);
+        srcMacAddress_ = 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>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string dst_mac_address = 2;</code>
+     * @return The dstMacAddress.
      */
     @java.lang.Override
-    public int getConfigRulesCount() {
-      return configRules_.size();
+    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;
+      }
     }
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>string dst_mac_address = 2;</code>
+     * @return The bytes for dstMacAddress.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-      return configRules_.get(index);
+    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 static final int ETHER_TYPE_FIELD_NUMBER = 3;
+    private int etherType_;
     /**
-     * <code>repeated .context.ConfigRule config_rules = 1;</code>
+     * <code>uint32 ether_type = 3;</code>
+     * @return The etherType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-        int index) {
-      return configRules_.get(index);
+    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;
@@ -24758,8 +37554,23 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < configRules_.size(); i++) {
-        output.writeMessage(1, configRules_.get(i));
+      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);
     }
@@ -24770,9 +37581,27 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < configRules_.size(); i++) {
+      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
-          .computeMessageSize(1, configRules_.get(i));
+          .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_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -24784,13 +37613,23 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceConfig)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L2)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) obj;
-
-      if (!getConfigRulesList()
-          .equals(other.getConfigRulesList())) return false;
+      context.ContextOuterClass.ConnectionSettings_L2 other = (context.ContextOuterClass.ConnectionSettings_L2) 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 (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -24802,78 +37641,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getConfigRulesCount() > 0) {
-        hash = (37 * hash) + CONFIG_RULES_FIELD_NUMBER;
-        hash = (53 * hash) + getConfigRulesList().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 = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig 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.ServiceConfig parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L2 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -24886,7 +37733,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceConfig prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L2 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -24902,26 +37749,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceConfig}
+     * 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.ServiceConfig)
-        context.ContextOuterClass.ServiceConfigOrBuilder {
+        // @@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_ServiceConfig_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_ServiceConfig_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L2.class, context.ContextOuterClass.ConnectionSettings_L2.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceConfig.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L2.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -24934,35 +37781,40 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getConfigRulesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          configRulesBuilder_.clear();
-        }
+        srcMacAddress_ = "";
+
+        dstMacAddress_ = "";
+
+        etherType_ = 0;
+
+        vlanId_ = 0;
+
+        mplsLabel_ = 0;
+
+        mplsTrafficClass_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceConfig_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L2_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig build() {
-        context.ContextOuterClass.ServiceConfig result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L2 build() {
+        context.ContextOuterClass.ConnectionSettings_L2 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -24970,18 +37822,14 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceConfig buildPartial() {
-        context.ContextOuterClass.ServiceConfig result = new context.ContextOuterClass.ServiceConfig(this);
-        int from_bitField0_ = bitField0_;
-        if (configRulesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            configRules_ = java.util.Collections.unmodifiableList(configRules_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.configRules_ = configRules_;
-        } else {
-          result.configRules_ = configRulesBuilder_.build();
-        }
+      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;
       }
@@ -25020,41 +37868,35 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceConfig) {
-          return mergeFrom((context.ContextOuterClass.ServiceConfig)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.ServiceConfig other) {
-        if (other == context.ContextOuterClass.ServiceConfig.getDefaultInstance()) return this;
-        if (configRulesBuilder_ == null) {
-          if (!other.configRules_.isEmpty()) {
-            if (configRules_.isEmpty()) {
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureConfigRulesIsMutable();
-              configRules_.addAll(other.configRules_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.configRules_.isEmpty()) {
-            if (configRulesBuilder_.isEmpty()) {
-              configRulesBuilder_.dispose();
-              configRulesBuilder_ = null;
-              configRules_ = other.configRules_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              configRulesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getConfigRulesFieldBuilder() : null;
-            } else {
-              configRulesBuilder_.addAllMessages(other.configRules_);
-            }
-          }
+      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_;
+          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();
@@ -25071,11 +37913,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceConfig parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L2 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceConfig) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L2) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -25084,246 +37926,281 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ConfigRule> configRules_ =
-        java.util.Collections.emptyList();
-      private void ensureConfigRulesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          configRules_ = new java.util.ArrayList<context.ContextOuterClass.ConfigRule>(configRules_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ConfigRule, context.ContextOuterClass.ConfigRule.Builder, context.ContextOuterClass.ConfigRuleOrBuilder> configRulesBuilder_;
 
+      private java.lang.Object srcMacAddress_ = "";
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @return The srcMacAddress.
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule> getConfigRulesList() {
-        if (configRulesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(configRules_);
+      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();
+          srcMacAddress_ = s;
+          return s;
         } else {
-          return configRulesBuilder_.getMessageList();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @return The bytes for srcMacAddress.
        */
-      public int getConfigRulesCount() {
-        if (configRulesBuilder_ == null) {
-          return configRules_.size();
+      public com.google.protobuf.ByteString
+          getSrcMacAddressBytes() {
+        java.lang.Object ref = srcMacAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          srcMacAddress_ = b;
+          return b;
         } else {
-          return configRulesBuilder_.getCount();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string src_mac_address = 1;</code>
+       * @param value The srcMacAddress to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule getConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);
+      public Builder setSrcMacAddress(
+          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 configRulesBuilder_.getMessage(index);
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @return The bytes for dstMacAddress.
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, value);
-          onChanged();
+      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 {
-          configRulesBuilder_.setMessage(index, value);
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The dstMacAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder setConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder setDstMacAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstMacAddress_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(value);
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(value);
-        }
+      public Builder clearDstMacAddress() {
+        
+        dstMacAddress_ = getDefaultInstance().getDstMacAddress();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>string dst_mac_address = 2;</code>
+       * @param value The bytes for dstMacAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule value) {
-        if (configRulesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, value);
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(index, value);
-        }
+      public Builder setDstMacAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        dstMacAddress_ = value;
+        onChanged();
         return this;
       }
+
+      private int etherType_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @return The etherType.
        */
-      public Builder addConfigRules(
-          context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public int getEtherType() {
+        return etherType_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @param value The etherType to set.
+       * @return This builder for chaining.
        */
-      public Builder addConfigRules(
-          int index, context.ContextOuterClass.ConfigRule.Builder builderForValue) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          configRulesBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder setEtherType(int value) {
+        
+        etherType_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 ether_type = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder addAllConfigRules(
-          java.lang.Iterable<? extends context.ContextOuterClass.ConfigRule> values) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, configRules_);
-          onChanged();
-        } else {
-          configRulesBuilder_.addAllMessages(values);
-        }
+      public Builder clearEtherType() {
+        
+        etherType_ = 0;
+        onChanged();
         return this;
       }
+
+      private int vlanId_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 vlan_id = 4;</code>
+       * @return The vlanId.
        */
-      public Builder clearConfigRules() {
-        if (configRulesBuilder_ == null) {
-          configRules_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          configRulesBuilder_.clear();
-        }
-        return this;
+      @java.lang.Override
+      public int getVlanId() {
+        return vlanId_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 vlan_id = 4;</code>
+       * @param value The vlanId to set.
+       * @return This builder for chaining.
        */
-      public Builder removeConfigRules(int index) {
-        if (configRulesBuilder_ == null) {
-          ensureConfigRulesIsMutable();
-          configRules_.remove(index);
-          onChanged();
-        } else {
-          configRulesBuilder_.remove(index);
-        }
+      public Builder setVlanId(int value) {
+        
+        vlanId_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 vlan_id = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule.Builder getConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().getBuilder(index);
+      public Builder clearVlanId() {
+        
+        vlanId_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int mplsLabel_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @return The mplsLabel.
        */
-      public context.ContextOuterClass.ConfigRuleOrBuilder getConfigRulesOrBuilder(
-          int index) {
-        if (configRulesBuilder_ == null) {
-          return configRules_.get(index);  } else {
-          return configRulesBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public int getMplsLabel() {
+        return mplsLabel_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @param value The mplsLabel to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.ConfigRuleOrBuilder> 
-           getConfigRulesOrBuilderList() {
-        if (configRulesBuilder_ != null) {
-          return configRulesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(configRules_);
-        }
+      public Builder setMplsLabel(int value) {
+        
+        mplsLabel_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 mpls_label = 5;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder() {
-        return getConfigRulesFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      public Builder clearMplsLabel() {
+        
+        mplsLabel_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int mplsTrafficClass_ ;
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return The mplsTrafficClass.
        */
-      public context.ContextOuterClass.ConfigRule.Builder addConfigRulesBuilder(
-          int index) {
-        return getConfigRulesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConfigRule.getDefaultInstance());
+      @java.lang.Override
+      public int getMplsTrafficClass() {
+        return mplsTrafficClass_;
       }
       /**
-       * <code>repeated .context.ConfigRule config_rules = 1;</code>
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @param value The mplsTrafficClass to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.ConfigRule.Builder> 
-           getConfigRulesBuilderList() {
-        return getConfigRulesFieldBuilder().getBuilderList();
+      public Builder setMplsTrafficClass(int value) {
+        
+        mplsTrafficClass_ = value;
+        onChanged();
+        return this;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          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());
-          configRules_ = null;
-        }
-        return configRulesBuilder_;
+      /**
+       * <code>uint32 mpls_traffic_class = 6;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMplsTrafficClass() {
+        
+        mplsTrafficClass_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -25338,95 +38215,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceConfig)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L2)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
-    private static final context.ContextOuterClass.ServiceConfig 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.ServiceConfig();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L2();
     }
 
-    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceConfig>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L2>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L2>() {
       @java.lang.Override
-      public ServiceConfig parsePartialFrom(
+      public ConnectionSettings_L2 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceConfig(input, extensionRegistry);
+        return new ConnectionSettings_L2(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceConfig> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L2> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L2> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L2 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
+  public interface ConnectionSettings_L3OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L3)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getServiceIdsList();
+    java.lang.String getSrcIpAddress();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
-    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    com.google.protobuf.ByteString
+        getSrcIpAddressBytes();
+
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
-    int getServiceIdsCount();
+    java.lang.String getDstIpAddress();
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList();
+    com.google.protobuf.ByteString
+        getDstIpAddressBytes();
+
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index);
+    int getDscp();
+
+    /**
+     * <code>uint32 protocol = 4;</code>
+     * @return The protocol.
+     */
+    int getProtocol();
+
+    /**
+     * <code>uint32 ttl = 5;</code>
+     * @return The ttl.
+     */
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ServiceIdList}
+   * Protobuf type {@code context.ConnectionSettings_L3}
    */
-  public static final class ServiceIdList extends
+  public static final class ConnectionSettings_L3 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
-      ServiceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L3)
+      ConnectionSettings_L3OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceIdList.newBuilder() to construct.
-    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L3.newBuilder() to construct.
+    private ConnectionSettings_L3(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceIdList() {
-      serviceIds_ = java.util.Collections.emptyList();
+    private ConnectionSettings_L3() {
+      srcIpAddress_ = "";
+      dstIpAddress_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceIdList();
+      return new ConnectionSettings_L3();
     }
 
     @java.lang.Override
@@ -25434,7 +38330,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceIdList(
+    private ConnectionSettings_L3(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -25442,7 +38338,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 {
@@ -25454,12 +38349,30 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              serviceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
+              java.lang.String s = input.readStringRequireUtf8();
+
+              srcIpAddress_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              dstIpAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              dscp_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              protocol_ = input.readUInt32();
+              break;
+            }
+            case 40: {
+
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -25477,64 +38390,130 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceIdList_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_ServiceIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
     }
 
-    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    public static final int SRC_IP_ADDRESS_FIELD_NUMBER = 1;
+    private volatile java.lang.Object srcIpAddress_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string src_ip_address = 1;</code>
+     * @return The srcIpAddress.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-      return serviceIds_;
+    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;
+      }
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string src_ip_address = 1;</code>
+     * @return The bytes for srcIpAddress.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getServiceIdsOrBuilderList() {
-      return serviceIds_;
+    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 DST_IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object dstIpAddress_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string dst_ip_address = 2;</code>
+     * @return The dstIpAddress.
      */
     @java.lang.Override
-    public int getServiceIdsCount() {
-      return serviceIds_.size();
+    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;
+      }
     }
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>string dst_ip_address = 2;</code>
+     * @return The bytes for dstIpAddress.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-      return serviceIds_.get(index);
+    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;
+      }
     }
+
+    public static final int DSCP_FIELD_NUMBER = 3;
+    private int dscp_;
     /**
-     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     * <code>uint32 dscp = 3;</code>
+     * @return The dscp.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-        int index) {
-      return serviceIds_.get(index);
+    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;
@@ -25551,8 +38530,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < serviceIds_.size(); i++) {
-        output.writeMessage(1, serviceIds_.get(i));
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, srcIpAddress_);
+      }
+      if (!getDstIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
+        output.writeUInt32(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        output.writeUInt32(4, protocol_);
+      }
+      if (ttl_ != 0) {
+        output.writeUInt32(5, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -25563,9 +38554,23 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < serviceIds_.size(); i++) {
+      if (!getSrcIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, srcIpAddress_);
+      }
+      if (!getDstIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, dstIpAddress_);
+      }
+      if (dscp_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, serviceIds_.get(i));
+          .computeUInt32Size(3, dscp_);
+      }
+      if (protocol_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, protocol_);
+      }
+      if (ttl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(5, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -25577,13 +38582,21 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L3)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
-
-      if (!getServiceIdsList()
-          .equals(other.getServiceIdsList())) return false;
+      context.ContextOuterClass.ConnectionSettings_L3 other = (context.ContextOuterClass.ConnectionSettings_L3) 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 (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -25595,78 +38608,84 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getServiceIdsCount() > 0) {
-        hash = (37 * hash) + SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceIdsList().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 = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList 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.ServiceIdList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L3 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -25679,7 +38698,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceIdList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L3 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -25695,26 +38714,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceIdList}
+     * 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.ServiceIdList)
-        context.ContextOuterClass.ServiceIdListOrBuilder {
+        // @@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_ServiceIdList_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_ServiceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceIdList.class, context.ContextOuterClass.ServiceIdList.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L3.class, context.ContextOuterClass.ConnectionSettings_L3.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L3.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -25727,35 +38746,38 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServiceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          serviceIdsBuilder_.clear();
-        }
+        srcIpAddress_ = "";
+
+        dstIpAddress_ = "";
+
+        dscp_ = 0;
+
+        protocol_ = 0;
+
+        ttl_ = 0;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L3_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList build() {
-        context.ContextOuterClass.ServiceIdList result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L3 build() {
+        context.ContextOuterClass.ConnectionSettings_L3 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -25763,18 +38785,13 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceIdList buildPartial() {
-        context.ContextOuterClass.ServiceIdList result = new context.ContextOuterClass.ServiceIdList(this);
-        int from_bitField0_ = bitField0_;
-        if (serviceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            serviceIds_ = java.util.Collections.unmodifiableList(serviceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.serviceIds_ = serviceIds_;
-        } else {
-          result.serviceIds_ = serviceIdsBuilder_.build();
-        }
+      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;
       }
@@ -25813,41 +38830,32 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceIdList) {
-          return mergeFrom((context.ContextOuterClass.ServiceIdList)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.ServiceIdList other) {
-        if (other == context.ContextOuterClass.ServiceIdList.getDefaultInstance()) return this;
-        if (serviceIdsBuilder_ == null) {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIds_.isEmpty()) {
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServiceIdsIsMutable();
-              serviceIds_.addAll(other.serviceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.serviceIds_.isEmpty()) {
-            if (serviceIdsBuilder_.isEmpty()) {
-              serviceIdsBuilder_.dispose();
-              serviceIdsBuilder_ = null;
-              serviceIds_ = other.serviceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              serviceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServiceIdsFieldBuilder() : null;
-            } else {
-              serviceIdsBuilder_.addAllMessages(other.serviceIds_);
-            }
-          }
+      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.getDstIpAddress().isEmpty()) {
+          dstIpAddress_ = other.dstIpAddress_;
+          onChanged();
+        }
+        if (other.getDscp() != 0) {
+          setDscp(other.getDscp());
+        }
+        if (other.getProtocol() != 0) {
+          setProtocol(other.getProtocol());
+        }
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -25864,11 +38872,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceIdList parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings_L3 parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L3) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -25877,246 +38885,250 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(serviceIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdsBuilder_;
-
-      /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
-        if (serviceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(serviceIds_);
-        } else {
-          return serviceIdsBuilder_.getMessageList();
-        }
-      }
+      private java.lang.Object srcIpAddress_ = "";
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @return The srcIpAddress.
        */
-      public int getServiceIdsCount() {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.size();
+      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 serviceIdsBuilder_.getCount();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @return The bytes for srcIpAddress.
        */
-      public context.ContextOuterClass.ServiceId getServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);
+      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 serviceIdsBuilder_.getMessage(index);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @param value The srcIpAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, value);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.setMessage(index, value);
-        }
+      public Builder setSrcIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        srcIpAddress_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder clearSrcIpAddress() {
+        
+        srcIpAddress_ = getDefaultInstance().getSrcIpAddress();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string src_ip_address = 1;</code>
+       * @param value The bytes for srcIpAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder addServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(value);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addMessage(value);
-        }
+      public Builder setSrcIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        srcIpAddress_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object dstIpAddress_ = "";
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @return The dstIpAddress.
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (serviceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, value);
-          onChanged();
+      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 {
-          serviceIdsBuilder_.addMessage(index, value);
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @return The bytes for dstIpAddress.
        */
-      public Builder addServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(builderForValue.build());
-          onChanged();
+      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 {
-          serviceIdsBuilder_.addMessage(builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The dstIpAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder addServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder setDstIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        dstIpAddress_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder addAllServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, serviceIds_);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.addAllMessages(values);
-        }
+      public Builder clearDstIpAddress() {
+        
+        dstIpAddress_ = getDefaultInstance().getDstIpAddress();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>string dst_ip_address = 2;</code>
+       * @param value The bytes for dstIpAddress to set.
+       * @return This builder for chaining.
        */
-      public Builder clearServiceIds() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.clear();
-        }
+      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>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 dscp = 3;</code>
+       * @return The dscp.
        */
-      public Builder removeServiceIds(int index) {
-        if (serviceIdsBuilder_ == null) {
-          ensureServiceIdsIsMutable();
-          serviceIds_.remove(index);
-          onChanged();
-        } else {
-          serviceIdsBuilder_.remove(index);
-        }
+      @java.lang.Override
+      public int getDscp() {
+        return dscp_;
+      }
+      /**
+       * <code>uint32 dscp = 3;</code>
+       * @param value The dscp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDscp(int value) {
+        
+        dscp_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 dscp = 3;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().getBuilder(index);
+      public Builder clearDscp() {
+        
+        dscp_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int protocol_ ;
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 protocol = 4;</code>
+       * @return The protocol.
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
-          int index) {
-        if (serviceIdsBuilder_ == null) {
-          return serviceIds_.get(index);  } else {
-          return serviceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public int getProtocol() {
+        return protocol_;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 protocol = 4;</code>
+       * @param value The protocol to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getServiceIdsOrBuilderList() {
-        if (serviceIdsBuilder_ != null) {
-          return serviceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(serviceIds_);
-        }
+      public Builder setProtocol(int value) {
+        
+        protocol_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 protocol = 4;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
-        return getServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public Builder clearProtocol() {
+        
+        protocol_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int ttl_ ;
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 ttl = 5;</code>
+       * @return The ttl.
        */
-      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
-          int index) {
-        return getServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       * <code>uint32 ttl = 5;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getServiceIdsBuilderList() {
-        return getServiceIdsFieldBuilder().getBuilderList();
+      public Builder setTtl(int value) {
+        
+        ttl_ = value;
+        onChanged();
+        return this;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getServiceIdsFieldBuilder() {
-        if (serviceIdsBuilder_ == null) {
-          serviceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  serviceIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          serviceIds_ = null;
-        }
-        return serviceIdsBuilder_;
+      /**
+       * <code>uint32 ttl = 5;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -26131,95 +39143,94 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceIdList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L3)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
-    private static final context.ContextOuterClass.ServiceIdList 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.ServiceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L3();
     }
 
-    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceIdList>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L3>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L3>() {
       @java.lang.Override
-      public ServiceIdList parsePartialFrom(
+      public ConnectionSettings_L3 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceIdList(input, extensionRegistry);
+        return new ConnectionSettings_L3(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceIdList> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L3> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L3> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L3 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceList)
+  public interface ConnectionSettings_L4OrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings_L4)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Service services = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Service> 
-        getServicesList();
-    /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
-    context.ContextOuterClass.Service getServices(int index);
+    int getSrcPort();
+
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
-    int getServicesCount();
+    int getDstPort();
+
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-        getServicesOrBuilderList();
+    int getTcpFlags();
+
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
-    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-        int index);
+    int getTtl();
   }
   /**
-   * Protobuf type {@code context.ServiceList}
+   * Protobuf type {@code context.ConnectionSettings_L4}
    */
-  public static final class ServiceList extends
+  public static final class ConnectionSettings_L4 extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceList)
-      ServiceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings_L4)
+      ConnectionSettings_L4OrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceList.newBuilder() to construct.
-    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings_L4.newBuilder() to construct.
+    private ConnectionSettings_L4(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceList() {
-      services_ = java.util.Collections.emptyList();
+    private ConnectionSettings_L4() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceList();
+      return new ConnectionSettings_L4();
     }
 
     @java.lang.Override
@@ -26227,7 +39238,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceList(
+    private ConnectionSettings_L4(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -26235,7 +39246,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 {
@@ -26246,13 +39256,24 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
-                mutable_bitField0_ |= 0x00000001;
-              }
-              services_.add(
-                  input.readMessage(context.ContextOuterClass.Service.parser(), extensionRegistry));
+            case 8: {
+
+              srcPort_ = input.readUInt32();
+              break;
+            }
+            case 16: {
+
+              dstPort_ = input.readUInt32();
+              break;
+            }
+            case 24: {
+
+              tcpFlags_ = input.readUInt32();
+              break;
+            }
+            case 32: {
+
+              ttl_ = input.readUInt32();
               break;
             }
             default: {
@@ -26270,64 +39291,65 @@ public final class ContextOuterClass {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          services_ = java.util.Collections.unmodifiableList(services_);
-        }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceList_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_ServiceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+              context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
     }
 
-    public static final int SERVICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Service> services_;
-    /**
-     * <code>repeated .context.Service services = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Service> getServicesList() {
-      return services_;
-    }
+    public static final int SRC_PORT_FIELD_NUMBER = 1;
+    private int srcPort_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 src_port = 1;</code>
+     * @return The srcPort.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-        getServicesOrBuilderList() {
-      return services_;
+    public int getSrcPort() {
+      return srcPort_;
     }
+
+    public static final int DST_PORT_FIELD_NUMBER = 2;
+    private int dstPort_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 dst_port = 2;</code>
+     * @return The dstPort.
      */
     @java.lang.Override
-    public int getServicesCount() {
-      return services_.size();
+    public int getDstPort() {
+      return dstPort_;
     }
+
+    public static final int TCP_FLAGS_FIELD_NUMBER = 3;
+    private int tcpFlags_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 tcp_flags = 3;</code>
+     * @return The tcpFlags.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Service getServices(int index) {
-      return services_.get(index);
+    public int getTcpFlags() {
+      return tcpFlags_;
     }
+
+    public static final int TTL_FIELD_NUMBER = 4;
+    private int ttl_;
     /**
-     * <code>repeated .context.Service services = 1;</code>
+     * <code>uint32 ttl = 4;</code>
+     * @return The ttl.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-        int index) {
-      return services_.get(index);
+    public int getTtl() {
+      return ttl_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -26344,8 +39366,17 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      for (int i = 0; i < services_.size(); i++) {
-        output.writeMessage(1, services_.get(i));
+      if (srcPort_ != 0) {
+        output.writeUInt32(1, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        output.writeUInt32(2, dstPort_);
+      }
+      if (tcpFlags_ != 0) {
+        output.writeUInt32(3, tcpFlags_);
+      }
+      if (ttl_ != 0) {
+        output.writeUInt32(4, ttl_);
       }
       unknownFields.writeTo(output);
     }
@@ -26356,9 +39387,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < services_.size(); i++) {
+      if (srcPort_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, services_.get(i));
+          .computeUInt32Size(1, srcPort_);
+      }
+      if (dstPort_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(2, dstPort_);
+      }
+      if (tcpFlags_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, tcpFlags_);
+      }
+      if (ttl_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, ttl_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -26370,13 +39413,19 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings_L4)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
+      context.ContextOuterClass.ConnectionSettings_L4 other = (context.ContextOuterClass.ConnectionSettings_L4) obj;
 
-      if (!getServicesList()
-          .equals(other.getServicesList())) 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;
     }
@@ -26388,78 +39437,82 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (getServicesCount() > 0) {
-        hash = (37 * hash) + SERVICES_FIELD_NUMBER;
-        hash = (53 * hash) + getServicesList().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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList 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.ServiceList parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings_L4 parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -26472,7 +39525,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceList prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings_L4 prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -26488,26 +39541,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceList}
+     * 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.ServiceList)
-        context.ContextOuterClass.ServiceListOrBuilder {
+        // @@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_ServiceList_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_ServiceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+                context.ContextOuterClass.ConnectionSettings_L4.class, context.ContextOuterClass.ConnectionSettings_L4.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings_L4.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -26520,35 +39573,36 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getServicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (servicesBuilder_ == null) {
-          services_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          servicesBuilder_.clear();
-        }
+        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_ServiceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_L4_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceList.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceList build() {
-        context.ContextOuterClass.ServiceList result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings_L4 build() {
+        context.ContextOuterClass.ConnectionSettings_L4 result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -26556,18 +39610,12 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceList buildPartial() {
-        context.ContextOuterClass.ServiceList result = new context.ContextOuterClass.ServiceList(this);
-        int from_bitField0_ = bitField0_;
-        if (servicesBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            services_ = java.util.Collections.unmodifiableList(services_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.services_ = services_;
-        } else {
-          result.services_ = servicesBuilder_.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;
       }
@@ -26606,310 +39654,179 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceList) {
-          return mergeFrom((context.ContextOuterClass.ServiceList)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.ServiceList other) {
-        if (other == context.ContextOuterClass.ServiceList.getDefaultInstance()) return this;
-        if (servicesBuilder_ == null) {
-          if (!other.services_.isEmpty()) {
-            if (services_.isEmpty()) {
-              services_ = other.services_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureServicesIsMutable();
-              services_.addAll(other.services_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.services_.isEmpty()) {
-            if (servicesBuilder_.isEmpty()) {
-              servicesBuilder_.dispose();
-              servicesBuilder_ = null;
-              services_ = other.services_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              servicesBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getServicesFieldBuilder() : null;
-            } else {
-              servicesBuilder_.addAllMessages(other.services_);
-            }
-          }
-        }
-        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.ServiceList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
-        return this;
-      }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.Service> services_ =
-        java.util.Collections.emptyList();
-      private void ensureServicesIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          services_ = new java.util.ArrayList<context.ContextOuterClass.Service>(services_);
-          bitField0_ |= 0x00000001;
-         }
-      }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> servicesBuilder_;
-
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Service> getServicesList() {
-        if (servicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(services_);
-        } else {
-          return servicesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public int getServicesCount() {
-        if (servicesBuilder_ == null) {
-          return services_.size();
-        } else {
-          return servicesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public context.ContextOuterClass.Service getServices(int index) {
-        if (servicesBuilder_ == null) {
-          return services_.get(index);
-        } else {
-          return servicesBuilder_.getMessage(index);
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings_L4 other) {
+        if (other == context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance()) return this;
+        if (other.getSrcPort() != 0) {
+          setSrcPort(other.getSrcPort());
         }
-      }
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public Builder setServices(
-          int index, context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServicesIsMutable();
-          services_.set(index, value);
-          onChanged();
-        } else {
-          servicesBuilder_.setMessage(index, value);
+        if (other.getDstPort() != 0) {
+          setDstPort(other.getDstPort());
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public Builder setServices(
-          int index, context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          servicesBuilder_.setMessage(index, builderForValue.build());
+        if (other.getTcpFlags() != 0) {
+          setTcpFlags(other.getTcpFlags());
         }
-        return this;
-      }
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public Builder addServices(context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureServicesIsMutable();
-          services_.add(value);
-          onChanged();
-        } else {
-          servicesBuilder_.addMessage(value);
+        if (other.getTtl() != 0) {
+          setTtl(other.getTtl());
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Service services = 1;</code>
-       */
-      public Builder addServices(
-          int index, context.ContextOuterClass.Service value) {
-        if (servicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @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.ConnectionSettings_L4 parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings_L4) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          ensureServicesIsMutable();
-          services_.add(index, value);
-          onChanged();
-        } else {
-          servicesBuilder_.addMessage(index, value);
         }
         return this;
       }
+
+      private int srcPort_ ;
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return The srcPort.
        */
-      public Builder addServices(
-          context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.add(builderForValue.build());
-          onChanged();
-        } else {
-          servicesBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      @java.lang.Override
+      public int getSrcPort() {
+        return srcPort_;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @param value The srcPort to set.
+       * @return This builder for chaining.
        */
-      public Builder addServices(
-          int index, context.ContextOuterClass.Service.Builder builderForValue) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          servicesBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder setSrcPort(int value) {
+        
+        srcPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 src_port = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder addAllServices(
-          java.lang.Iterable<? extends context.ContextOuterClass.Service> values) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, services_);
-          onChanged();
-        } else {
-          servicesBuilder_.addAllMessages(values);
-        }
+      public Builder clearSrcPort() {
+        
+        srcPort_ = 0;
+        onChanged();
         return this;
       }
+
+      private int dstPort_ ;
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return The dstPort.
        */
-      public Builder clearServices() {
-        if (servicesBuilder_ == null) {
-          services_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          servicesBuilder_.clear();
-        }
-        return this;
+      @java.lang.Override
+      public int getDstPort() {
+        return dstPort_;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @param value The dstPort to set.
+       * @return This builder for chaining.
        */
-      public Builder removeServices(int index) {
-        if (servicesBuilder_ == null) {
-          ensureServicesIsMutable();
-          services_.remove(index);
-          onChanged();
-        } else {
-          servicesBuilder_.remove(index);
-        }
+      public Builder setDstPort(int value) {
+        
+        dstPort_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 dst_port = 2;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Service.Builder getServicesBuilder(
-          int index) {
-        return getServicesFieldBuilder().getBuilder(index);
+      public Builder clearDstPort() {
+        
+        dstPort_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int tcpFlags_ ;
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return The tcpFlags.
        */
-      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
-          int index) {
-        if (servicesBuilder_ == null) {
-          return services_.get(index);  } else {
-          return servicesBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public int getTcpFlags() {
+        return tcpFlags_;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @param value The tcpFlags to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
-           getServicesOrBuilderList() {
-        if (servicesBuilder_ != null) {
-          return servicesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(services_);
-        }
+      public Builder setTcpFlags(int value) {
+        
+        tcpFlags_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 tcp_flags = 3;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
-        return getServicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Service.getDefaultInstance());
+      public Builder clearTcpFlags() {
+        
+        tcpFlags_ = 0;
+        onChanged();
+        return this;
       }
+
+      private int ttl_ ;
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @return The ttl.
        */
-      public context.ContextOuterClass.Service.Builder addServicesBuilder(
-          int index) {
-        return getServicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Service.getDefaultInstance());
+      @java.lang.Override
+      public int getTtl() {
+        return ttl_;
       }
       /**
-       * <code>repeated .context.Service services = 1;</code>
+       * <code>uint32 ttl = 4;</code>
+       * @param value The ttl to set.
+       * @return This builder for chaining.
        */
-      public java.util.List<context.ContextOuterClass.Service.Builder> 
-           getServicesBuilderList() {
-        return getServicesFieldBuilder().getBuilderList();
+      public Builder setTtl(int value) {
+        
+        ttl_ = value;
+        onChanged();
+        return this;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder> 
-          getServicesFieldBuilder() {
-        if (servicesBuilder_ == null) {
-          servicesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Service, context.ContextOuterClass.Service.Builder, context.ContextOuterClass.ServiceOrBuilder>(
-                  services_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          services_ = null;
-        }
-        return servicesBuilder_;
+      /**
+       * <code>uint32 ttl = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTtl() {
+        
+        ttl_ = 0;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -26924,100 +39841,130 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceList)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings_L4)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceList)
-    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings_L4)
+    private static final context.ContextOuterClass.ConnectionSettings_L4 DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings_L4();
     }
 
-    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceList>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings_L4>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings_L4>() {
       @java.lang.Override
-      public ServiceList parsePartialFrom(
+      public ConnectionSettings_L4 parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceList(input, extensionRegistry);
+        return new ConnectionSettings_L4(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceList> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings_L4> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceList> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings_L4> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings_L4 getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ServiceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
+  public interface ConnectionSettingsOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionSettings)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
-    boolean hasEvent();
+    boolean hasL0();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.ConnectionSettings_L0 getL0();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    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>.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>
+     */
+    context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder();
+
+    /**
+     * <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>
+     */
+    context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder();
   }
   /**
-   * Protobuf type {@code context.ServiceEvent}
+   * Protobuf type {@code context.ConnectionSettings}
    */
-  public static final class ServiceEvent extends
+  public static final class ConnectionSettings extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
-      ServiceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionSettings)
+      ConnectionSettingsOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ServiceEvent.newBuilder() to construct.
-    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionSettings.newBuilder() to construct.
+    private ConnectionSettings(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ServiceEvent() {
+    private ConnectionSettings() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ServiceEvent();
+      return new ConnectionSettings();
     }
 
     @java.lang.Override
@@ -27025,7 +39972,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ServiceEvent(
+    private ConnectionSettings(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -27044,27 +39991,53 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.ConnectionSettings_L0.Builder subBuilder = null;
+              if (l0_ != null) {
+                subBuilder = l0_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              l0_ = input.readMessage(context.ContextOuterClass.ConnectionSettings_L0.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = 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: {
+              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();
+              }
+
+              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();
               }
 
               break;
@@ -27090,67 +40063,119 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_ServiceEvent_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_ServiceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+              context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int L0_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionSettings_L0 l0_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return Whether the l0 field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasL0() {
+      return l0_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+     * @return The l0.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+      return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    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 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_;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+      return getL3();
+    }
+
+    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_;
+    }
+    /**
+     * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+      return getL4();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -27167,11 +40192,17 @@ 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 (l0_ != null) {
+        output.writeMessage(1, getL0());
       }
-      if (serviceId_ != null) {
-        output.writeMessage(2, getServiceId());
+      if (l2_ != null) {
+        output.writeMessage(2, getL2());
+      }
+      if (l3_ != null) {
+        output.writeMessage(3, getL3());
+      }
+      if (l4_ != null) {
+        output.writeMessage(4, getL4());
       }
       unknownFields.writeTo(output);
     }
@@ -27182,13 +40213,21 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (l0_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getL0());
       }
-      if (serviceId_ != null) {
+      if (l2_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getServiceId());
+          .computeMessageSize(2, getL2());
+      }
+      if (l3_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getL3());
+      }
+      if (l4_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getL4());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -27200,20 +40239,30 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ServiceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionSettings)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
+      context.ContextOuterClass.ConnectionSettings other = (context.ContextOuterClass.ConnectionSettings) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) 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 (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;
@@ -27226,82 +40275,90 @@ 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 (hasL0()) {
+        hash = (37 * hash) + L0_FIELD_NUMBER;
+        hash = (53 * hash) + getL0().hashCode();
       }
-      if (hasServiceId()) {
-        hash = (37 * hash) + SERVICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getServiceId().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 = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceEvent 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.ServiceEvent 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.ServiceEvent 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.ServiceEvent parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ServiceEvent 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.ServiceEvent 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.ServiceEvent 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.ServiceEvent 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.ServiceEvent 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.ServiceEvent 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.ServiceEvent parseFrom(
+    public static context.ContextOuterClass.ConnectionSettings parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -27314,7 +40371,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.ServiceEvent prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionSettings prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -27330,26 +40387,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ServiceEvent}
+     * Protobuf type {@code context.ConnectionSettings}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.ServiceEvent)
-        context.ContextOuterClass.ServiceEventOrBuilder {
+        // @@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_ServiceEvent_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_ServiceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+                context.ContextOuterClass.ConnectionSettings.class, context.ContextOuterClass.ConnectionSettings.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ServiceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionSettings.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -27367,17 +40424,29 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (l0Builder_ == null) {
+          l0_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          l0_ = null;
+          l0Builder_ = null;
         }
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+        if (l2Builder_ == null) {
+          l2_ = null;
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l2_ = null;
+          l2Builder_ = null;
+        }
+        if (l3Builder_ == null) {
+          l3_ = null;
+        } else {
+          l3_ = null;
+          l3Builder_ = null;
+        }
+        if (l4Builder_ == null) {
+          l4_ = null;
+        } else {
+          l4_ = null;
+          l4Builder_ = null;
         }
         return this;
       }
@@ -27385,17 +40454,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionSettings_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
+      public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionSettings.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent build() {
-        context.ContextOuterClass.ServiceEvent result = buildPartial();
+      public context.ContextOuterClass.ConnectionSettings build() {
+        context.ContextOuterClass.ConnectionSettings result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -27403,17 +40472,27 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ServiceEvent buildPartial() {
-        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
-        if (eventBuilder_ == null) {
-          result.event_ = event_;
+      public context.ContextOuterClass.ConnectionSettings buildPartial() {
+        context.ContextOuterClass.ConnectionSettings result = new context.ContextOuterClass.ConnectionSettings(this);
+        if (l0Builder_ == null) {
+          result.l0_ = l0_;
         } else {
-          result.event_ = eventBuilder_.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 (l3Builder_ == null) {
+          result.l3_ = l3_;
+        } else {
+          result.l3_ = l3Builder_.build();
+        }
+        if (l4Builder_ == null) {
+          result.l4_ = l4_;
+        } else {
+          result.l4_ = l4Builder_.build();
         }
         onBuilt();
         return result;
@@ -27453,21 +40532,27 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ServiceEvent) {
-          return mergeFrom((context.ContextOuterClass.ServiceEvent)other);
+        if (other instanceof context.ContextOuterClass.ConnectionSettings) {
+          return mergeFrom((context.ContextOuterClass.ConnectionSettings)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ServiceEvent other) {
-        if (other == context.ContextOuterClass.ServiceEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionSettings other) {
+        if (other == context.ContextOuterClass.ConnectionSettings.getDefaultInstance()) return this;
+        if (other.hasL0()) {
+          mergeL0(other.getL0());
         }
-        if (other.hasServiceId()) {
-          mergeServiceId(other.getServiceId());
+        if (other.hasL2()) {
+          mergeL2(other.getL2());
+        }
+        if (other.hasL3()) {
+          mergeL3(other.getL3());
+        }
+        if (other.hasL4()) {
+          mergeL4(other.getL4());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -27484,256 +40569,494 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ServiceEvent parsedMessage = null;
+        context.ContextOuterClass.ConnectionSettings parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ServiceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConnectionSettings) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
             mergeFrom(parsedMessage);
           }
         }
-        return this;
+        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;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       * @return The l0.
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0 getL0() {
+        if (l0Builder_ == null) {
+          return l0_ == null ? context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+        } else {
+          return l0Builder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder setL0(context.ContextOuterClass.ConnectionSettings_L0 value) {
+        if (l0Builder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          l0_ = value;
+          onChanged();
+        } else {
+          l0Builder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder setL0(
+          context.ContextOuterClass.ConnectionSettings_L0.Builder builderForValue) {
+        if (l0Builder_ == null) {
+          l0_ = builderForValue.build();
+          onChanged();
+        } else {
+          l0Builder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      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;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public Builder clearL0() {
+        if (l0Builder_ == null) {
+          l0_ = null;
+          onChanged();
+        } else {
+          l0_ = null;
+          l0Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0.Builder getL0Builder() {
+        
+        onChanged();
+        return getL0FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L0OrBuilder getL0OrBuilder() {
+        if (l0Builder_ != null) {
+          return l0Builder_.getMessageOrBuilder();
+        } else {
+          return l0_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L0.getDefaultInstance() : l0_;
+        }
+      }
+      /**
+       * <code>.context.ConnectionSettings_L0 l0 = 1;</code>
+       */
+      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);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public Builder setL2(
+          context.ContextOuterClass.ConnectionSettings_L2.Builder builderForValue) {
+        if (l2Builder_ == null) {
+          l2_ = builderForValue.build();
+          onChanged();
+        } else {
+          l2Builder_.setMessage(builderForValue.build());
+        }
+
+        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;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public Builder clearL2() {
+        if (l2Builder_ == null) {
+          l2_ = null;
+          onChanged();
+        } else {
+          l2_ = null;
+          l2Builder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2.Builder getL2Builder() {
+        
+        onChanged();
+        return getL2FieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConnectionSettings_L2 l2 = 2;</code>
+       */
+      public context.ContextOuterClass.ConnectionSettings_L2OrBuilder getL2OrBuilder() {
+        if (l2Builder_ != null) {
+          return l2Builder_.getMessageOrBuilder();
+        } else {
+          return l2_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L2.getDefaultInstance() : l2_;
+        }
+      }
+      /**
+       * <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_;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.ConnectionSettings_L3 l3_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L3, context.ContextOuterClass.ConnectionSettings_L3.Builder, context.ContextOuterClass.ConnectionSettings_L3OrBuilder> l3Builder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return Whether the l3 field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasL3() {
+        return l3Builder_ != null || l3_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
+       * @return The l3.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.ConnectionSettings_L3 getL3() {
+        if (l3Builder_ == null) {
+          return l3_ == null ? context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         } else {
-          return eventBuilder_.getMessage();
+          return l3Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          l3_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          l3Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setL3(
+          context.ContextOuterClass.ConnectionSettings_L3.Builder builderForValue) {
+        if (l3Builder_ == null) {
+          l3_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          l3Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</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 mergeL3(context.ContextOuterClass.ConnectionSettings_L3 value) {
+        if (l3Builder_ == null) {
+          if (l3_ != null) {
+            l3_ =
+              context.ContextOuterClass.ConnectionSettings_L3.newBuilder(l3_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            l3_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          l3Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearL3() {
+        if (l3Builder_ == null) {
+          l3_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          l3_ = null;
+          l3Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L3.Builder getL3Builder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getL3FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L3OrBuilder getL3OrBuilder() {
+        if (l3Builder_ != null) {
+          return l3Builder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return l3_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L3.getDefaultInstance() : l3_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.ConnectionSettings_L3 l3 = 3;</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.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());
-          event_ = null;
+          l3_ = null;
         }
-        return eventBuilder_;
+        return l3Builder_;
       }
 
-      private context.ContextOuterClass.ServiceId serviceId_;
+      private context.ContextOuterClass.ConnectionSettings_L4 l4_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+          context.ContextOuterClass.ConnectionSettings_L4, context.ContextOuterClass.ConnectionSettings_L4.Builder, context.ContextOuterClass.ConnectionSettings_L4OrBuilder> l4Builder_;
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return Whether the serviceId field is set.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return Whether the l4 field is set.
        */
-      public boolean hasServiceId() {
-        return serviceIdBuilder_ != null || serviceId_ != null;
+      public boolean hasL4() {
+        return l4Builder_ != null || l4_ != null;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
-       * @return The serviceId.
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
+       * @return The l4.
        */
-      public context.ContextOuterClass.ServiceId getServiceId() {
-        if (serviceIdBuilder_ == null) {
-          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+      public context.ContextOuterClass.ConnectionSettings_L4 getL4() {
+        if (l4Builder_ == null) {
+          return l4_ == null ? context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
         } else {
-          return serviceIdBuilder_.getMessage();
+          return l4Builder_.getMessage();
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
-        if (serviceIdBuilder_ == null) {
+      public Builder setL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          serviceId_ = value;
+          l4_ = value;
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(value);
+          l4Builder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder setServiceId(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = builderForValue.build();
+      public Builder setL4(
+          context.ContextOuterClass.ConnectionSettings_L4.Builder builderForValue) {
+        if (l4Builder_ == null) {
+          l4_ = builderForValue.build();
           onChanged();
         } else {
-          serviceIdBuilder_.setMessage(builderForValue.build());
+          l4Builder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</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 mergeL4(context.ContextOuterClass.ConnectionSettings_L4 value) {
+        if (l4Builder_ == null) {
+          if (l4_ != null) {
+            l4_ =
+              context.ContextOuterClass.ConnectionSettings_L4.newBuilder(l4_).mergeFrom(value).buildPartial();
           } else {
-            serviceId_ = value;
+            l4_ = value;
           }
           onChanged();
         } else {
-          serviceIdBuilder_.mergeFrom(value);
+          l4Builder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public Builder clearServiceId() {
-        if (serviceIdBuilder_ == null) {
-          serviceId_ = null;
+      public Builder clearL4() {
+        if (l4Builder_ == null) {
+          l4_ = null;
           onChanged();
         } else {
-          serviceId_ = null;
-          serviceIdBuilder_ = null;
+          l4_ = null;
+          l4Builder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+      public context.ContextOuterClass.ConnectionSettings_L4.Builder getL4Builder() {
         
         onChanged();
-        return getServiceIdFieldBuilder().getBuilder();
+        return getL4FieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</code>
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
-        if (serviceIdBuilder_ != null) {
-          return serviceIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettings_L4OrBuilder getL4OrBuilder() {
+        if (l4Builder_ != null) {
+          return l4Builder_.getMessageOrBuilder();
         } else {
-          return serviceId_ == null ?
-              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+          return l4_ == null ?
+              context.ContextOuterClass.ConnectionSettings_L4.getDefaultInstance() : l4_;
         }
       }
       /**
-       * <code>.context.ServiceId service_id = 2;</code>
+       * <code>.context.ConnectionSettings_L4 l4 = 4;</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_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());
-          serviceId_ = null;
+          l4_ = null;
         }
-        return serviceIdBuilder_;
+        return l4Builder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -27748,104 +41071,165 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ServiceEvent)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionSettings)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
-    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionSettings)
+    private static final context.ContextOuterClass.ConnectionSettings DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionSettings();
     }
 
-    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionSettings getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<ServiceEvent>
-        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
+    private static final com.google.protobuf.Parser<ConnectionSettings>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionSettings>() {
       @java.lang.Override
-      public ServiceEvent parsePartialFrom(
+      public ConnectionSettings parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ServiceEvent(input, extensionRegistry);
+        return new ConnectionSettings(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ServiceEvent> parser() {
+    public static com.google.protobuf.Parser<ConnectionSettings> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionSettings> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionSettings getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceId)
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
-    boolean hasContextId();
+    boolean hasConnectionId();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
-    context.ContextOuterClass.ContextId getContextId();
+    context.ContextOuterClass.ConnectionId getConnectionId();
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
      */
-    context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder();
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
 
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return Whether the sliceUuid field is set.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
-    boolean hasSliceUuid();
+    boolean hasServiceId();
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return The sliceUuid.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
-    context.ContextOuterClass.Uuid getSliceUuid();
+    context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder();
+    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();
   }
   /**
-   * <pre>
-   * ----- Slice ---------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.SliceId}
+   * Protobuf type {@code context.Connection}
    */
-  public static final class SliceId extends
+  public static final class Connection extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceId)
-      SliceIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceId.newBuilder() to construct.
-    private SliceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceId() {
+    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 SliceId();
+      return new Connection();
     }
 
     @java.lang.Override
@@ -27853,7 +41237,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceId(
+    private Connection(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -27861,6 +41245,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 {
@@ -27872,27 +41257,58 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.ContextId.Builder subBuilder = null;
-              if (contextId_ != null) {
-                subBuilder = contextId_.toBuilder();
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
               }
-              contextId_ = input.readMessage(context.ContextOuterClass.ContextId.parser(), extensionRegistry);
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(contextId_);
-                contextId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (sliceUuid_ != null) {
-                subBuilder = sliceUuid_.toBuilder();
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (serviceId_ != null) {
+                subBuilder = serviceId_.toBuilder();
               }
-              sliceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              serviceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceUuid_);
-                sliceUuid_ = subBuilder.buildPartial();
+                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;
@@ -27912,73 +41328,185 @@ 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_SliceId_descriptor;
+      return context.ContextOuterClass.internal_static_context_Connection_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
+              context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
     }
 
-    public static final int CONTEXT_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.ContextId contextId_;
+    public static final int CONNECTION_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.ConnectionId connectionId_;
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return Whether the contextId field is set.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
      */
     @java.lang.Override
-    public boolean hasContextId() {
-      return contextId_ != null;
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
-     * @return The contextId.
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextId getContextId() {
-      return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+    public context.ContextOuterClass.ConnectionId getConnectionId() {
+      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
     }
     /**
-     * <code>.context.ContextId context_id = 1;</code>
+     * <code>.context.ConnectionId connection_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-      return getContextId();
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
     }
 
-    public static final int SLICE_UUID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.Uuid sliceUuid_;
+    public static final int SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return Whether the sliceUuid field is set.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return Whether the serviceId field is set.
      */
     @java.lang.Override
-    public boolean hasSliceUuid() {
-      return sliceUuid_ != null;
+    public boolean hasServiceId() {
+      return serviceId_ != null;
     }
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
-     * @return The sliceUuid.
+     * <code>.context.ServiceId service_id = 2;</code>
+     * @return The serviceId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getSliceUuid() {
-      return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+    public context.ContextOuterClass.ServiceId getServiceId() {
+      return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <code>.context.Uuid slice_uuid = 2;</code>
+     * <code>.context.ServiceId service_id = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-      return getSliceUuid();
+    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;
@@ -27995,11 +41523,20 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (contextId_ != null) {
-        output.writeMessage(1, getContextId());
+      if (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
       }
-      if (sliceUuid_ != null) {
-        output.writeMessage(2, getSliceUuid());
+      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);
     }
@@ -28010,13 +41547,25 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (contextId_ != null) {
+      if (connectionId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getContextId());
+          .computeMessageSize(1, getConnectionId());
       }
-      if (sliceUuid_ != null) {
+      if (serviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceUuid());
+          .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;
@@ -28028,20 +41577,29 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceId)) {
+      if (!(obj instanceof context.ContextOuterClass.Connection)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceId other = (context.ContextOuterClass.SliceId) obj;
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
 
-      if (hasContextId() != other.hasContextId()) return false;
-      if (hasContextId()) {
-        if (!getContextId()
-            .equals(other.getContextId())) return false;
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
       }
-      if (hasSliceUuid() != other.hasSliceUuid()) return false;
-      if (hasSliceUuid()) {
-        if (!getSliceUuid()
-            .equals(other.getSliceUuid())) 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;
@@ -28054,82 +41612,94 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasContextId()) {
-        hash = (37 * hash) + CONTEXT_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getContextId().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
       }
-      if (hasSliceUuid()) {
-        hash = (37 * hash) + SLICE_UUID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceUuid().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.SliceId parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    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.SliceId parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    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.SliceId parseFrom(byte[] data)
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceId parseFrom(
+    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.SliceId parseFrom(java.io.InputStream input)
+    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.SliceId parseFrom(
+    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.SliceId parseDelimitedFrom(java.io.InputStream input)
+    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.SliceId parseDelimitedFrom(
+    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.SliceId parseFrom(
+    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.SliceId parseFrom(
+    public static context.ContextOuterClass.Connection parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -28142,7 +41712,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceId prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -28158,414 +41728,1109 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Slice ---------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.SliceId}
+     * Protobuf type {@code context.Connection}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.SliceId)
-        context.ContextOuterClass.SliceIdOrBuilder {
+        // @@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_SliceId_descriptor;
+        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;
+        }
 
-      @java.lang.Override
-      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-          internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_SliceId_fieldAccessorTable
-            .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceId.class, context.ContextOuterClass.SliceId.Builder.class);
+        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_;
       }
 
-      // Construct using context.ContextOuterClass.SliceId.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      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 Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      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 void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public int getPathHopsEndpointIdsCount() {
+        if (pathHopsEndpointIdsBuilder_ == null) {
+          return pathHopsEndpointIds_.size();
+        } else {
+          return pathHopsEndpointIdsBuilder_.getCount();
         }
       }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      /**
+       * <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 {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          return pathHopsEndpointIdsBuilder_.getMessage(index);
         }
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = null;
+      }
+      /**
+       * <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 {
-          sliceUuid_ = null;
-          sliceUuidBuilder_ = null;
+          pathHopsEndpointIdsBuilder_.setMessage(index, value);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceId_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceId.getDefaultInstance();
+      /**
+       * <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;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceId build() {
-        context.ContextOuterClass.SliceId result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <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 result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceId buildPartial() {
-        context.ContextOuterClass.SliceId result = new context.ContextOuterClass.SliceId(this);
-        if (contextIdBuilder_ == null) {
-          result.contextId_ = contextId_;
+      /**
+       * <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 {
-          result.contextId_ = contextIdBuilder_.build();
+          pathHopsEndpointIdsBuilder_.addMessage(index, value);
         }
-        if (sliceUuidBuilder_ == null) {
-          result.sliceUuid_ = sliceUuid_;
+        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 {
-          result.sliceUuid_ = sliceUuidBuilder_.build();
+          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
         }
-        onBuilt();
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <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;
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <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;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <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;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <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;
       }
-      @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 .context.EndPointId path_hops_endpoint_ids = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathHopsEndpointIdsBuilder(
+          int index) {
+        return getPathHopsEndpointIdsFieldBuilder().getBuilder(index);
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <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);
+        }
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceId) {
-          return mergeFrom((context.ContextOuterClass.SliceId)other);
+      /**
+       * <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 {
-          super.mergeFrom(other);
-          return this;
+          return java.util.Collections.unmodifiableList(pathHopsEndpointIds_);
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.SliceId other) {
-        if (other == context.ContextOuterClass.SliceId.getDefaultInstance()) return this;
-        if (other.hasContextId()) {
-          mergeContextId(other.getContextId());
-        }
-        if (other.hasSliceUuid()) {
-          mergeSliceUuid(other.getSliceUuid());
+      /**
+       * <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;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        return pathHopsEndpointIdsBuilder_;
       }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      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;
+         }
       }
 
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.SliceId parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceId) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      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;
       }
-
-      private context.ContextOuterClass.ContextId contextId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> contextIdBuilder_;
       /**
-       * <code>.context.ContextId context_id = 1;</code>
-       * @return Whether the contextId field is set.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public boolean hasContextId() {
-        return contextIdBuilder_ != null || contextId_ != null;
+      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>.context.ContextId context_id = 1;</code>
-       * @return The contextId.
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.ContextId getContextId() {
-        if (contextIdBuilder_ == null) {
-          return contextId_ == null ? context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(value);
+          onChanged();
         } else {
-          return contextIdBuilder_.getMessage();
+          subServiceIdsBuilder_.addMessage(value);
         }
+        return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder setContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
+      public Builder addSubServiceIds(
+          int index, context.ContextOuterClass.ServiceId value) {
+        if (subServiceIdsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          contextId_ = value;
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(index, value);
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(value);
+          subServiceIdsBuilder_.addMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder setContextId(
-          context.ContextOuterClass.ContextId.Builder builderForValue) {
-        if (contextIdBuilder_ == null) {
-          contextId_ = builderForValue.build();
+      public Builder addSubServiceIds(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.add(builderForValue.build());
           onChanged();
         } else {
-          contextIdBuilder_.setMessage(builderForValue.build());
+          subServiceIdsBuilder_.addMessage(builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder mergeContextId(context.ContextOuterClass.ContextId value) {
-        if (contextIdBuilder_ == null) {
-          if (contextId_ != null) {
-            contextId_ =
-              context.ContextOuterClass.ContextId.newBuilder(contextId_).mergeFrom(value).buildPartial();
-          } else {
-            contextId_ = value;
-          }
+      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 {
-          contextIdBuilder_.mergeFrom(value);
+          subServiceIdsBuilder_.clear();
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public Builder clearContextId() {
-        if (contextIdBuilder_ == null) {
-          contextId_ = null;
+      public Builder removeSubServiceIds(int index) {
+        if (subServiceIdsBuilder_ == null) {
+          ensureSubServiceIdsIsMutable();
+          subServiceIds_.remove(index);
           onChanged();
         } else {
-          contextId_ = null;
-          contextIdBuilder_ = null;
+          subServiceIdsBuilder_.remove(index);
         }
-
         return this;
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.ContextId.Builder getContextIdBuilder() {
-        
-        onChanged();
-        return getContextIdFieldBuilder().getBuilder();
+      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
+          int index) {
+        return getSubServiceIdsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      public context.ContextOuterClass.ContextIdOrBuilder getContextIdOrBuilder() {
-        if (contextIdBuilder_ != null) {
-          return contextIdBuilder_.getMessageOrBuilder();
+      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 contextId_ == null ?
-              context.ContextOuterClass.ContextId.getDefaultInstance() : contextId_;
+          return java.util.Collections.unmodifiableList(subServiceIds_);
         }
       }
       /**
-       * <code>.context.ContextId context_id = 1;</code>
+       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
        */
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder> 
-          getContextIdFieldBuilder() {
-        if (contextIdBuilder_ == null) {
-          contextIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.ContextId, context.ContextOuterClass.ContextId.Builder, context.ContextOuterClass.ContextIdOrBuilder>(
-                  getContextId(),
+      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());
-          contextId_ = null;
+          subServiceIds_ = null;
         }
-        return contextIdBuilder_;
+        return subServiceIdsBuilder_;
       }
 
-      private context.ContextOuterClass.Uuid sliceUuid_;
+      private context.ContextOuterClass.ConnectionSettings settings_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> sliceUuidBuilder_;
+          context.ContextOuterClass.ConnectionSettings, context.ContextOuterClass.ConnectionSettings.Builder, context.ContextOuterClass.ConnectionSettingsOrBuilder> settingsBuilder_;
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
-       * @return Whether the sliceUuid field is set.
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return Whether the settings field is set.
        */
-      public boolean hasSliceUuid() {
-        return sliceUuidBuilder_ != null || sliceUuid_ != null;
+      public boolean hasSettings() {
+        return settingsBuilder_ != null || settings_ != null;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
-       * @return The sliceUuid.
+       * <code>.context.ConnectionSettings settings = 5;</code>
+       * @return The settings.
        */
-      public context.ContextOuterClass.Uuid getSliceUuid() {
-        if (sliceUuidBuilder_ == null) {
-          return sliceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+      public context.ContextOuterClass.ConnectionSettings getSettings() {
+        if (settingsBuilder_ == null) {
+          return settings_ == null ? context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
         } else {
-          return sliceUuidBuilder_.getMessage();
+          return settingsBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder setSliceUuid(context.ContextOuterClass.Uuid value) {
-        if (sliceUuidBuilder_ == null) {
+      public Builder setSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceUuid_ = value;
+          settings_ = value;
           onChanged();
         } else {
-          sliceUuidBuilder_.setMessage(value);
+          settingsBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder setSliceUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = builderForValue.build();
+      public Builder setSettings(
+          context.ContextOuterClass.ConnectionSettings.Builder builderForValue) {
+        if (settingsBuilder_ == null) {
+          settings_ = builderForValue.build();
           onChanged();
         } else {
-          sliceUuidBuilder_.setMessage(builderForValue.build());
+          settingsBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder mergeSliceUuid(context.ContextOuterClass.Uuid value) {
-        if (sliceUuidBuilder_ == null) {
-          if (sliceUuid_ != null) {
-            sliceUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(sliceUuid_).mergeFrom(value).buildPartial();
+      public Builder mergeSettings(context.ContextOuterClass.ConnectionSettings value) {
+        if (settingsBuilder_ == null) {
+          if (settings_ != null) {
+            settings_ =
+              context.ContextOuterClass.ConnectionSettings.newBuilder(settings_).mergeFrom(value).buildPartial();
           } else {
-            sliceUuid_ = value;
+            settings_ = value;
           }
           onChanged();
         } else {
-          sliceUuidBuilder_.mergeFrom(value);
+          settingsBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public Builder clearSliceUuid() {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuid_ = null;
+      public Builder clearSettings() {
+        if (settingsBuilder_ == null) {
+          settings_ = null;
           onChanged();
         } else {
-          sliceUuid_ = null;
-          sliceUuidBuilder_ = null;
+          settings_ = null;
+          settingsBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getSliceUuidBuilder() {
+      public context.ContextOuterClass.ConnectionSettings.Builder getSettingsBuilder() {
         
         onChanged();
-        return getSliceUuidFieldBuilder().getBuilder();
+        return getSettingsFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getSliceUuidOrBuilder() {
-        if (sliceUuidBuilder_ != null) {
-          return sliceUuidBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionSettingsOrBuilder getSettingsOrBuilder() {
+        if (settingsBuilder_ != null) {
+          return settingsBuilder_.getMessageOrBuilder();
         } else {
-          return sliceUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : sliceUuid_;
+          return settings_ == null ?
+              context.ContextOuterClass.ConnectionSettings.getDefaultInstance() : settings_;
         }
       }
       /**
-       * <code>.context.Uuid slice_uuid = 2;</code>
+       * <code>.context.ConnectionSettings settings = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
-          getSliceUuidFieldBuilder() {
-        if (sliceUuidBuilder_ == null) {
-          sliceUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
-                  getSliceUuid(),
+          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());
-          sliceUuid_ = null;
+          settings_ = null;
         }
-        return sliceUuidBuilder_;
+        return settingsBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -28580,200 +42845,95 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceId)
+      // @@protoc_insertion_point(builder_scope:context.Connection)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceId)
-    private static final context.ContextOuterClass.SliceId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
     }
 
-    public static context.ContextOuterClass.SliceId getDefaultInstance() {
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceId>
-        PARSER = new com.google.protobuf.AbstractParser<SliceId>() {
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
       @java.lang.Override
-      public SliceId parsePartialFrom(
+      public Connection parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceId(input, extensionRegistry);
+        return new Connection(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceId> parser() {
+    public static com.google.protobuf.Parser<Connection> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceId> getParserForType() {
+    public com.google.protobuf.Parser<Connection> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Slice)
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return Whether the sliceId field is set.
-     */
-    boolean hasSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return The sliceId.
-     */
-    context.ContextOuterClass.SliceId getSliceId();
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
-
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    java.util.List<context.ContextOuterClass.EndPointId> 
-        getSliceEndpointIdsList();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointId getSliceEndpointIds(int index);
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    int getSliceEndpointIdsCount();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getSliceEndpointIdsOrBuilderList();
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    java.util.List<context.ContextOuterClass.Constraint> 
-        getSliceConstraintsList();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    context.ContextOuterClass.Constraint getSliceConstraints(int index);
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    int getSliceConstraintsCount();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getSliceConstraintsOrBuilderList();
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    java.util.List<context.ContextOuterClass.ServiceId> 
-        getSliceServiceIdsList();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceId getSliceServiceIds(int index);
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    int getSliceServiceIdsCount();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSliceServiceIdsOrBuilderList();
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-        int index);
-
-    /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceSubsliceIdsList();
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.SliceId getSliceSubsliceIds(int index);
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    int getSliceSubsliceIdsCount();
+    int getConnectionIdsCount();
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceSubsliceIdsOrBuilderList();
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
         int index);
-
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return Whether the sliceStatus field is set.
-     */
-    boolean hasSliceStatus();
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return The sliceStatus.
-     */
-    context.ContextOuterClass.SliceStatus getSliceStatus();
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     */
-    context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder();
   }
   /**
-   * Protobuf type {@code context.Slice}
+   * Protobuf type {@code context.ConnectionIdList}
    */
-  public static final class Slice extends
+  public static final class ConnectionIdList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Slice)
-      SliceOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Slice.newBuilder() to construct.
-    private Slice(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Slice() {
-      sliceEndpointIds_ = java.util.Collections.emptyList();
-      sliceConstraints_ = java.util.Collections.emptyList();
-      sliceServiceIds_ = java.util.Collections.emptyList();
-      sliceSubsliceIds_ = java.util.Collections.emptyList();
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Slice();
+      return new ConnectionIdList();
     }
 
     @java.lang.Override
@@ -28781,7 +42941,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Slice(
+    private ConnectionIdList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -28801,65 +42961,12 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              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;
-            }
-            case 18: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              sliceEndpointIds_.add(
-                  input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry));
-              break;
-            }
-            case 26: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
-                sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>();
-                mutable_bitField0_ |= 0x00000002;
-              }
-              sliceConstraints_.add(
-                  input.readMessage(context.ContextOuterClass.Constraint.parser(), extensionRegistry));
-              break;
-            }
-            case 34: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
-                sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
-                mutable_bitField0_ |= 0x00000004;
-              }
-              sliceServiceIds_.add(
-                  input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry));
-              break;
-            }
-            case 42: {
-              if (!((mutable_bitField0_ & 0x00000008) != 0)) {
-                sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                mutable_bitField0_ |= 0x00000008;
-              }
-              sliceSubsliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
-              break;
-            }
-            case 50: {
-              context.ContextOuterClass.SliceStatus.Builder subBuilder = null;
-              if (sliceStatus_ != null) {
-                subBuilder = sliceStatus_.toBuilder();
-              }
-              sliceStatus_ = input.readMessage(context.ContextOuterClass.SliceStatus.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceStatus_);
-                sliceStatus_ = subBuilder.buildPartial();
-              }
-
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -28878,244 +42985,63 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
-          sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-        }
-        if (((mutable_bitField0_ & 0x00000004) != 0)) {
-          sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-        }
-        if (((mutable_bitField0_ & 0x00000008) != 0)) {
-          sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-        }
-        this.unknownFields = unknownFields.build();
-        makeExtensionsImmutable();
-      }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Slice_descriptor;
-    }
-
-    @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
-    }
-
-    public static final int SLICE_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.SliceId sliceId_;
-    /**
-     * <code>.context.SliceId slice_id = 1;</code>
-     * @return Whether the sliceId field is set.
-     */
-    @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
-    }
-    /**
-     * <code>.context.SliceId slice_id = 1;</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 = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
-    }
-
-    public static final int SLICE_ENDPOINT_IDS_FIELD_NUMBER = 2;
-    private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_;
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
-      return sliceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getSliceEndpointIdsOrBuilderList() {
-      return sliceEndpointIds_;
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public int getSliceEndpointIdsCount() {
-      return sliceEndpointIds_.size();
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
-      return sliceEndpointIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-        int index) {
-      return sliceEndpointIds_.get(index);
-    }
-
-    public static final int SLICE_CONSTRAINTS_FIELD_NUMBER = 3;
-    private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_;
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
-      return sliceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-        getSliceConstraintsOrBuilderList() {
-      return sliceConstraints_;
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public int getSliceConstraintsCount() {
-      return sliceConstraints_.size();
-    }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
-      return sliceConstraints_.get(index);
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
     }
-    /**
-     * <code>repeated .context.Constraint slice_constraints = 3;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
-        int index) {
-      return sliceConstraints_.get(index);
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
     }
 
-    public static final int SLICE_SERVICE_IDS_FIELD_NUMBER = 4;
-    private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_;
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
-      return sliceServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSliceServiceIdsOrBuilderList() {
-      return sliceServiceIds_;
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public int getSliceServiceIdsCount() {
-      return sliceServiceIds_.size();
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
-      return sliceServiceIds_.get(index);
-    }
-    /**
-     * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-     */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-        int index) {
-      return sliceServiceIds_.get(index);
+    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 SLICE_SUBSLICE_IDS_FIELD_NUMBER = 5;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_;
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
-      return sliceSubsliceIds_;
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
     }
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceSubsliceIdsOrBuilderList() {
-      return sliceSubsliceIds_;
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
     }
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public int getSliceSubsliceIdsCount() {
-      return sliceSubsliceIds_.size();
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
     }
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
-      return sliceSubsliceIds_.get(index);
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
     }
     /**
-     * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
         int index) {
-      return sliceSubsliceIds_.get(index);
-    }
-
-    public static final int SLICE_STATUS_FIELD_NUMBER = 6;
-    private context.ContextOuterClass.SliceStatus sliceStatus_;
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return Whether the sliceStatus field is set.
-     */
-    @java.lang.Override
-    public boolean hasSliceStatus() {
-      return sliceStatus_ != null;
-    }
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     * @return The sliceStatus.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceStatus getSliceStatus() {
-      return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
-    }
-    /**
-     * <code>.context.SliceStatus slice_status = 6;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-      return getSliceStatus();
+      return connectionIds_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -29132,23 +43058,8 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (sliceId_ != null) {
-        output.writeMessage(1, getSliceId());
-      }
-      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
-        output.writeMessage(2, sliceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < sliceConstraints_.size(); i++) {
-        output.writeMessage(3, sliceConstraints_.get(i));
-      }
-      for (int i = 0; i < sliceServiceIds_.size(); i++) {
-        output.writeMessage(4, sliceServiceIds_.get(i));
-      }
-      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
-        output.writeMessage(5, sliceSubsliceIds_.get(i));
-      }
-      if (sliceStatus_ != null) {
-        output.writeMessage(6, getSliceStatus());
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -29159,29 +43070,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (sliceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getSliceId());
-      }
-      for (int i = 0; i < sliceEndpointIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, sliceEndpointIds_.get(i));
-      }
-      for (int i = 0; i < sliceConstraints_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, sliceConstraints_.get(i));
-      }
-      for (int i = 0; i < sliceServiceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, sliceServiceIds_.get(i));
-      }
-      for (int i = 0; i < sliceSubsliceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(5, sliceSubsliceIds_.get(i));
-      }
-      if (sliceStatus_ != null) {
+      for (int i = 0; i < connectionIds_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(6, getSliceStatus());
+          .computeMessageSize(1, connectionIds_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -29193,29 +43084,13 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Slice)) {
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Slice other = (context.ContextOuterClass.Slice) obj;
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
 
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) return false;
-      }
-      if (!getSliceEndpointIdsList()
-          .equals(other.getSliceEndpointIdsList())) return false;
-      if (!getSliceConstraintsList()
-          .equals(other.getSliceConstraintsList())) return false;
-      if (!getSliceServiceIdsList()
-          .equals(other.getSliceServiceIdsList())) return false;
-      if (!getSliceSubsliceIdsList()
-          .equals(other.getSliceSubsliceIdsList())) return false;
-      if (hasSliceStatus() != other.hasSliceStatus()) return false;
-      if (hasSliceStatus()) {
-        if (!getSliceStatus()
-            .equals(other.getSliceStatus())) return false;
-      }
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -29227,98 +43102,78 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().hashCode();
-      }
-      if (getSliceEndpointIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_ENDPOINT_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceEndpointIdsList().hashCode();
-      }
-      if (getSliceConstraintsCount() > 0) {
-        hash = (37 * hash) + SLICE_CONSTRAINTS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceConstraintsList().hashCode();
-      }
-      if (getSliceServiceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_SERVICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceServiceIdsList().hashCode();
-      }
-      if (getSliceSubsliceIdsCount() > 0) {
-        hash = (37 * hash) + SLICE_SUBSLICE_IDS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceSubsliceIdsList().hashCode();
-      }
-      if (hasSliceStatus()) {
-        hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceStatus().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.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    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.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    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.Slice parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.Slice parseFrom(
+    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.Slice parseFrom(java.io.InputStream input)
+    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.Slice parseFrom(
+    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.Slice parseDelimitedFrom(java.io.InputStream input)
+    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.Slice parseDelimitedFrom(
+    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.Slice parseFrom(
+    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.Slice parseFrom(
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -29331,7 +43186,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.Slice prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -29347,26 +43202,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.Slice}
+     * Protobuf type {@code context.ConnectionIdList}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:context.Slice)
-        context.ContextOuterClass.SliceOrBuilder {
+        // @@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_Slice_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return context.ContextOuterClass.internal_static_context_Slice_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.Slice.class, context.ContextOuterClass.Slice.Builder.class);
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.Slice.newBuilder()
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -29379,1508 +43234,2013 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceEndpointIdsFieldBuilder();
-          getSliceConstraintsFieldBuilder();
-          getSliceServiceIdsFieldBuilder();
-          getSliceSubsliceIdsFieldBuilder();
+          getConnectionIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          connectionIdsBuilder_.clear();
         }
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        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 {
-          sliceEndpointIdsBuilder_.clear();
+          result.connectionIds_ = connectionIdsBuilder_.build();
         }
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+        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 {
-          sliceConstraintsBuilder_.clear();
+          super.mergeFrom(other);
+          return this;
         }
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+      }
+
+      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 {
-          sliceServiceIdsBuilder_.clear();
+          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_);
+            }
+          }
         }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+        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 this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
+        java.util.Collections.emptyList();
+      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.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
+
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+        if (connectionIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connectionIds_);
         } else {
-          sliceSubsliceIdsBuilder_.clear();
+          return connectionIdsBuilder_.getMessageList();
         }
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = null;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public int getConnectionIdsCount() {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.size();
+        } else {
+          return connectionIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);
+        } else {
+          return connectionIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder setConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(value);
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      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 {
-          sliceStatus_ = null;
-          sliceStatusBuilder_ = null;
+          connectionIdsBuilder_.addMessage(index, value);
         }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Slice_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Slice getDefaultInstanceForType() {
-        return context.ContextOuterClass.Slice.getDefaultInstance();
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Slice build() {
-        context.ContextOuterClass.Slice result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          connectionIdsBuilder_.addMessage(builderForValue.build());
         }
-        return result;
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Slice buildPartial() {
-        context.ContextOuterClass.Slice result = new context.ContextOuterClass.Slice(this);
-        int from_bitField0_ = bitField0_;
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder addConnectionIds(
+          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.add(index, builderForValue.build());
+          onChanged();
         } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+          connectionIdsBuilder_.addMessage(index, builderForValue.build());
         }
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            sliceEndpointIds_ = java.util.Collections.unmodifiableList(sliceEndpointIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sliceEndpointIds_ = sliceEndpointIds_;
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      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 {
-          result.sliceEndpointIds_ = sliceEndpointIdsBuilder_.build();
+          connectionIdsBuilder_.addAllMessages(values);
         }
-        if (sliceConstraintsBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
-            sliceConstraints_ = java.util.Collections.unmodifiableList(sliceConstraints_);
-            bitField0_ = (bitField0_ & ~0x00000002);
-          }
-          result.sliceConstraints_ = sliceConstraints_;
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder clearConnectionIds() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
         } else {
-          result.sliceConstraints_ = sliceConstraintsBuilder_.build();
+          connectionIdsBuilder_.clear();
         }
-        if (sliceServiceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
-            sliceServiceIds_ = java.util.Collections.unmodifiableList(sliceServiceIds_);
-            bitField0_ = (bitField0_ & ~0x00000004);
-          }
-          result.sliceServiceIds_ = sliceServiceIds_;
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public Builder removeConnectionIds(int index) {
+        if (connectionIdsBuilder_ == null) {
+          ensureConnectionIdsIsMutable();
+          connectionIds_.remove(index);
+          onChanged();
         } else {
-          result.sliceServiceIds_ = sliceServiceIdsBuilder_.build();
+          connectionIdsBuilder_.remove(index);
         }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000008) != 0)) {
-            sliceSubsliceIds_ = java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-            bitField0_ = (bitField0_ & ~0x00000008);
-          }
-          result.sliceSubsliceIds_ = sliceSubsliceIds_;
-        } else {
-          result.sliceSubsliceIds_ = sliceSubsliceIdsBuilder_.build();
+        return this;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+          int index) {
+        if (connectionIdsBuilder_ == null) {
+          return connectionIds_.get(index);  } else {
+          return connectionIdsBuilder_.getMessageOrBuilder(index);
         }
-        if (sliceStatusBuilder_ == null) {
-          result.sliceStatus_ = sliceStatus_;
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
         } else {
-          result.sliceStatus_ = sliceStatusBuilder_.build();
+          return java.util.Collections.unmodifiableList(connectionIds_);
         }
-        onBuilt();
-        return result;
       }
-
-      @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      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());
+          connectionIds_ = null;
+        }
+        return connectionIdsBuilder_;
       }
       @java.lang.Override
-      public Builder setRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          int index, java.lang.Object value) {
-        return super.setRepeatedField(field, index, value);
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
       }
+
       @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
+    private static final context.ContextOuterClass.ConnectionIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionIdList();
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionIdList>() {
       @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Slice) {
-          return mergeFrom((context.ContextOuterClass.Slice)other);
-        } else {
-          super.mergeFrom(other);
-          return this;
-        }
+      public ConnectionIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionIdList(input, extensionRegistry);
       }
+    };
 
-      public Builder mergeFrom(context.ContextOuterClass.Slice other) {
-        if (other == context.ContextOuterClass.Slice.getDefaultInstance()) return this;
-        if (other.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
-        }
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (!other.sliceEndpointIds_.isEmpty()) {
-            if (sliceEndpointIds_.isEmpty()) {
-              sliceEndpointIds_ = other.sliceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSliceEndpointIdsIsMutable();
-              sliceEndpointIds_.addAll(other.sliceEndpointIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceEndpointIds_.isEmpty()) {
-            if (sliceEndpointIdsBuilder_.isEmpty()) {
-              sliceEndpointIdsBuilder_.dispose();
-              sliceEndpointIdsBuilder_ = null;
-              sliceEndpointIds_ = other.sliceEndpointIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sliceEndpointIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceEndpointIdsFieldBuilder() : null;
-            } else {
-              sliceEndpointIdsBuilder_.addAllMessages(other.sliceEndpointIds_);
-            }
-          }
-        }
-        if (sliceConstraintsBuilder_ == null) {
-          if (!other.sliceConstraints_.isEmpty()) {
-            if (sliceConstraints_.isEmpty()) {
-              sliceConstraints_ = other.sliceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-            } else {
-              ensureSliceConstraintsIsMutable();
-              sliceConstraints_.addAll(other.sliceConstraints_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceConstraints_.isEmpty()) {
-            if (sliceConstraintsBuilder_.isEmpty()) {
-              sliceConstraintsBuilder_.dispose();
-              sliceConstraintsBuilder_ = null;
-              sliceConstraints_ = other.sliceConstraints_;
-              bitField0_ = (bitField0_ & ~0x00000002);
-              sliceConstraintsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceConstraintsFieldBuilder() : null;
-            } else {
-              sliceConstraintsBuilder_.addAllMessages(other.sliceConstraints_);
-            }
-          }
-        }
-        if (sliceServiceIdsBuilder_ == null) {
-          if (!other.sliceServiceIds_.isEmpty()) {
-            if (sliceServiceIds_.isEmpty()) {
-              sliceServiceIds_ = other.sliceServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-            } else {
-              ensureSliceServiceIdsIsMutable();
-              sliceServiceIds_.addAll(other.sliceServiceIds_);
-            }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceServiceIds_.isEmpty()) {
-            if (sliceServiceIdsBuilder_.isEmpty()) {
-              sliceServiceIdsBuilder_.dispose();
-              sliceServiceIdsBuilder_ = null;
-              sliceServiceIds_ = other.sliceServiceIds_;
-              bitField0_ = (bitField0_ & ~0x00000004);
-              sliceServiceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceServiceIdsFieldBuilder() : null;
-            } else {
-              sliceServiceIdsBuilder_.addAllMessages(other.sliceServiceIds_);
-            }
-          }
-        }
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (!other.sliceSubsliceIds_.isEmpty()) {
-            if (sliceSubsliceIds_.isEmpty()) {
-              sliceSubsliceIds_ = other.sliceSubsliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-            } else {
-              ensureSliceSubsliceIdsIsMutable();
-              sliceSubsliceIds_.addAll(other.sliceSubsliceIds_);
+    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.Connection> 
+        getConnectionsList();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    context.ContextOuterClass.Connection getConnections(int index);
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    int getConnectionsCount();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList();
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionList}
+   */
+  public static final class ConnectionList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionList)
+      ConnectionListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionList.newBuilder() to construct.
+    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionList() {
+      connections_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionList(
+        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)) {
+                connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connections_.add(
+                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              break;
             }
-            onChanged();
-          }
-        } else {
-          if (!other.sliceSubsliceIds_.isEmpty()) {
-            if (sliceSubsliceIdsBuilder_.isEmpty()) {
-              sliceSubsliceIdsBuilder_.dispose();
-              sliceSubsliceIdsBuilder_ = null;
-              sliceSubsliceIds_ = other.sliceSubsliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000008);
-              sliceSubsliceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceSubsliceIdsFieldBuilder() : null;
-            } else {
-              sliceSubsliceIdsBuilder_.addAllMessages(other.sliceSubsliceIds_);
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
             }
           }
         }
-        if (other.hasSliceStatus()) {
-          mergeSliceStatus(other.getSliceStatus());
+      } 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)) {
+          connections_ = java.util.Collections.unmodifiableList(connections_);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
       }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+    }
 
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
-      }
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+    }
+
+    public static final int CONNECTIONS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+      return connections_;
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+        getConnectionsOrBuilderList() {
+      return connections_;
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionsCount() {
+      return connections_.size();
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getConnections(int index) {
+      return connections_.get(index);
+    }
+    /**
+     * <code>repeated .context.Connection connections = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+        int index) {
+      return connections_.get(index);
+    }
 
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Slice parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Slice) 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 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 = 1;</code>
-       * @return Whether the sliceId field is set.
-       */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 1;</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 = 1;</code>
-       */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          sliceId_ = value;
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(value);
-        }
+      memoizedIsInitialized = 1;
+      return true;
+    }
 
-        return this;
+    @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));
       }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
-        }
+      unknownFields.writeTo(output);
+    }
 
-        return this;
-      }
-      /**
-       * <code>.context.SliceId slice_id = 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);
-        }
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-        return this;
+      size = 0;
+      for (int i = 0; i < connections_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connections_.get(i));
       }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
-          onChanged();
-        } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
-        }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
 
-        return this;
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
-        
-        onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>.context.SliceId slice_id = 1;</code>
-       */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
-        }
+      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
+
+      if (!getConnectionsList()
+          .equals(other.getConnectionsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>.context.SliceId slice_id = 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(),
-                  getParentForChildren(),
-                  isClean());
-          sliceId_ = null;
-        }
-        return sliceIdBuilder_;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionsCount() > 0) {
+        hash = (37 * hash) + CONNECTIONS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionsList().hashCode();
       }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
 
-      private java.util.List<context.ContextOuterClass.EndPointId> sliceEndpointIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceEndpointIdsIsMutable() {
-        if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(sliceEndpointIds_);
-          bitField0_ |= 0x00000001;
-         }
-      }
+    public static context.ContextOuterClass.ConnectionList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ConnectionList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ConnectionList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionList 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 com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> sliceEndpointIdsBuilder_;
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
 
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId> getSliceEndpointIdsList() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
-        } else {
-          return sliceEndpointIdsBuilder_.getMessageList();
-        }
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_ConnectionList_descriptor;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public int getSliceEndpointIdsCount() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.size();
-        } else {
-          return sliceEndpointIdsBuilder_.getCount();
-        }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId getSliceEndpointIds(int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.get(index);
-        } else {
-          return sliceEndpointIdsBuilder_.getMessage(index);
-        }
+
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder setSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.setMessage(index, value);
-        }
-        return this;
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder setSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionsFieldBuilder();
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(value);
-          onChanged();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          sliceEndpointIdsBuilder_.addMessage(value);
+          connectionsBuilder_.clear();
         }
         return this;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId value) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(
-          context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addSliceEndpointIds(
-          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.addMessage(index, builderForValue.build());
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return this;
+        return result;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder addAllSliceEndpointIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceEndpointIds_);
-          onChanged();
+
+      @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_;
         } else {
-          sliceEndpointIdsBuilder_.addAllMessages(values);
+          result.connections_ = connectionsBuilder_.build();
         }
-        return this;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder clearSliceEndpointIds() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.clear();
-        }
-        return this;
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public Builder removeSliceEndpointIds(int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          ensureSliceEndpointIdsIsMutable();
-          sliceEndpointIds_.remove(index);
-          onChanged();
-        } else {
-          sliceEndpointIdsBuilder_.remove(index);
-        }
-        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 .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder getSliceEndpointIdsBuilder(
-          int index) {
-        return getSliceEndpointIdsFieldBuilder().getBuilder(index);
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointIdOrBuilder getSliceEndpointIdsOrBuilder(
-          int index) {
-        if (sliceEndpointIdsBuilder_ == null) {
-          return sliceEndpointIds_.get(index);  } else {
-          return sliceEndpointIdsBuilder_.getMessageOrBuilder(index);
-        }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getSliceEndpointIdsOrBuilderList() {
-        if (sliceEndpointIdsBuilder_ != null) {
-          return sliceEndpointIdsBuilder_.getMessageOrBuilderList();
+      @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.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
         } else {
-          return java.util.Collections.unmodifiableList(sliceEndpointIds_);
+          super.mergeFrom(other);
+          return this;
         }
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder() {
-        return getSliceEndpointIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.EndPointId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public context.ContextOuterClass.EndPointId.Builder addSliceEndpointIdsBuilder(
-          int index) {
-        return getSliceEndpointIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+
+      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_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
       }
-      /**
-       * <code>repeated .context.EndPointId slice_endpoint_ids = 2;</code>
-       */
-      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
-           getSliceEndpointIdsBuilderList() {
-        return getSliceEndpointIdsFieldBuilder().getBuilderList();
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
-          getSliceEndpointIdsFieldBuilder() {
-        if (sliceEndpointIdsBuilder_ == null) {
-          sliceEndpointIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
-                  sliceEndpointIds_,
-                  ((bitField0_ & 0x00000001) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceEndpointIds_ = null;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
-        return sliceEndpointIdsBuilder_;
+        return this;
       }
+      private int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.Constraint> sliceConstraints_ =
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
         java.util.Collections.emptyList();
-      private void ensureSliceConstraintsIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
-          sliceConstraints_ = new java.util.ArrayList<context.ContextOuterClass.Constraint>(sliceConstraints_);
-          bitField0_ |= 0x00000002;
+      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.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> sliceConstraintsBuilder_;
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Constraint> getSliceConstraintsList() {
-        if (sliceConstraintsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceConstraints_);
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
         } else {
-          return sliceConstraintsBuilder_.getMessageList();
+          return connectionsBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public int getSliceConstraintsCount() {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.size();
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
         } else {
-          return sliceConstraintsBuilder_.getCount();
+          return connectionsBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.Constraint getSliceConstraints(int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.get(index);
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
         } else {
-          return sliceConstraintsBuilder_.getMessage(index);
+          return connectionsBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setSliceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.set(index, value);
+          ensureConnectionsIsMutable();
+          connections_.set(index, value);
           onChanged();
         } else {
-          sliceConstraintsBuilder_.setMessage(index, value);
+          connectionsBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder setSliceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.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 {
-          sliceConstraintsBuilder_.setMessage(index, builderForValue.build());
+          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addSliceConstraints(context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
+      public Builder addConnections(context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(value);
+          ensureConnectionsIsMutable();
+          connections_.add(value);
           onChanged();
         } else {
-          sliceConstraintsBuilder_.addMessage(value);
+          connectionsBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addSliceConstraints(
-          int index, context.ContextOuterClass.Constraint value) {
-        if (sliceConstraintsBuilder_ == null) {
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(index, value);
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
           onChanged();
         } else {
-          sliceConstraintsBuilder_.addMessage(index, value);
+          connectionsBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addSliceConstraints(
-          context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.add(builderForValue.build());
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
           onChanged();
         } else {
-          sliceConstraintsBuilder_.addMessage(builderForValue.build());
+          connectionsBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addSliceConstraints(
-          int index, context.ContextOuterClass.Constraint.Builder builderForValue) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.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 {
-          sliceConstraintsBuilder_.addMessage(index, builderForValue.build());
+          connectionsBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder addAllSliceConstraints(
-          java.lang.Iterable<? extends context.ContextOuterClass.Constraint> values) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceConstraints_);
+              values, connections_);
           onChanged();
         } else {
-          sliceConstraintsBuilder_.addAllMessages(values);
+          connectionsBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder clearSliceConstraints() {
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraints_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          sliceConstraintsBuilder_.clear();
+          connectionsBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public Builder removeSliceConstraints(int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          ensureSliceConstraintsIsMutable();
-          sliceConstraints_.remove(index);
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
           onChanged();
         } else {
-          sliceConstraintsBuilder_.remove(index);
+          connectionsBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.Constraint.Builder getSliceConstraintsBuilder(
+      public context.ContextOuterClass.Connection.Builder getConnectionsBuilder(
           int index) {
-        return getSliceConstraintsFieldBuilder().getBuilder(index);
+        return getConnectionsFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.ConstraintOrBuilder getSliceConstraintsOrBuilder(
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
           int index) {
-        if (sliceConstraintsBuilder_ == null) {
-          return sliceConstraints_.get(index);  } else {
-          return sliceConstraintsBuilder_.getMessageOrBuilder(index);
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
-           getSliceConstraintsOrBuilderList() {
-        if (sliceConstraintsBuilder_ != null) {
-          return sliceConstraintsBuilder_.getMessageOrBuilderList();
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(sliceConstraints_);
+          return java.util.Collections.unmodifiableList(connections_);
         }
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder() {
-        return getSliceConstraintsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Constraint.getDefaultInstance());
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
+        return getConnectionsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public context.ContextOuterClass.Constraint.Builder addSliceConstraintsBuilder(
+      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
           int index) {
-        return getSliceConstraintsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+        return getConnectionsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Connection.getDefaultInstance());
       }
       /**
-       * <code>repeated .context.Constraint slice_constraints = 3;</code>
+       * <code>repeated .context.Connection connections = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
-           getSliceConstraintsBuilderList() {
-        return getSliceConstraintsFieldBuilder().getBuilderList();
+      public java.util.List<context.ContextOuterClass.Connection.Builder> 
+           getConnectionsBuilderList() {
+        return getConnectionsFieldBuilder().getBuilderList();
       }
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder> 
-          getSliceConstraintsFieldBuilder() {
-        if (sliceConstraintsBuilder_ == null) {
-          sliceConstraintsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.Constraint, context.ContextOuterClass.Constraint.Builder, context.ContextOuterClass.ConstraintOrBuilder>(
-                  sliceConstraints_,
-                  ((bitField0_ & 0x00000002) != 0),
+          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());
-          sliceConstraints_ = null;
+          connections_ = null;
+        }
+        return connectionsBuilder_;
+      }
+      @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.ConnectionList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionList)
+    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+    }
+
+    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionList>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionList>() {
+      @java.lang.Override
+      public ConnectionList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return Whether the event field is set.
+     */
+    boolean hasEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    context.ContextOuterClass.Event getEvent();
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.ConnectionEvent}
+   */
+  public static final class ConnectionEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
+      ConnectionEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionEvent.newBuilder() to construct.
+    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionEvent(
+        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.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.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: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
         }
-        return sliceConstraintsBuilder_;
+      } 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_ConnectionEvent_descriptor;
+    }
 
-      private java.util.List<context.ContextOuterClass.ServiceId> sliceServiceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceServiceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
-          sliceServiceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>(sliceServiceIds_);
-          bitField0_ |= 0x00000004;
-         }
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.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;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     * @return The event.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Event getEvent() {
+      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    }
+    /**
+     * <code>.context.Event event = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+      return getEvent();
+    }
+
+    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ConnectionId connectionId_;
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</code>
+     * @return Whether the connectionId field is set.
+     */
+    @java.lang.Override
+    public boolean hasConnectionId() {
+      return connectionId_ != null;
+    }
+    /**
+     * <code>.context.ConnectionId connection_id = 2;</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 = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+      return getConnectionId();
+    }
+
+    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 (event_ != null) {
+        output.writeMessage(1, getEvent());
+      }
+      if (connectionId_ != null) {
+        output.writeMessage(2, getConnectionId());
       }
+      unknownFields.writeTo(output);
+    }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> sliceServiceIdsBuilder_;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
 
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId> getSliceServiceIdsList() {
-        if (sliceServiceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceServiceIds_);
-        } else {
-          return sliceServiceIdsBuilder_.getMessageList();
-        }
+      size = 0;
+      if (event_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEvent());
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public int getSliceServiceIdsCount() {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.size();
-        } else {
-          return sliceServiceIdsBuilder_.getCount();
-        }
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getConnectionId());
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId getSliceServiceIds(int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.get(index);
-        } else {
-          return sliceServiceIdsBuilder_.getMessage(index);
-        }
+      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 .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder setSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.setMessage(index, value);
-        }
-        return this;
+      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+        return super.equals(obj);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder setSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
+      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
+
+      if (hasEvent() != other.hasEvent()) return false;
+      if (hasEvent()) {
+        if (!getEvent()
+            .equals(other.getEvent())) return false;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(value);
-        }
-        return this;
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId value) {
-        if (sliceServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasEvent()) {
+        hash = (37 * hash) + EVENT_FIELD_NUMBER;
+        hash = (53 * hash) + getEvent().hashCode();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addSliceServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder addAllSliceServiceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.ServiceId> values) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceServiceIds_);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.addAllMessages(values);
-        }
-        return this;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ConnectionEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ConnectionEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ConnectionEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_ConnectionEvent_descriptor;
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder clearSliceServiceIds() {
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.clear();
-        }
-        return this;
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public Builder removeSliceServiceIds(int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          ensureSliceServiceIdsIsMutable();
-          sliceServiceIds_.remove(index);
-          onChanged();
-        } else {
-          sliceServiceIdsBuilder_.remove(index);
-        }
-        return this;
+
+      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder getSliceServiceIdsBuilder(
-          int index) {
-        return getSliceServiceIdsFieldBuilder().getBuilder(index);
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSliceServiceIdsOrBuilder(
-          int index) {
-        if (sliceServiceIdsBuilder_ == null) {
-          return sliceServiceIds_.get(index);  } else {
-          return sliceServiceIdsBuilder_.getMessageOrBuilder(index);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
       }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSliceServiceIdsOrBuilderList() {
-        if (sliceServiceIdsBuilder_ != null) {
-          return sliceServiceIdsBuilder_.getMessageOrBuilderList();
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
         } else {
-          return java.util.Collections.unmodifiableList(sliceServiceIds_);
+          event_ = null;
+          eventBuilder_ = null;
         }
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder() {
-        return getSliceServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public context.ContextOuterClass.ServiceId.Builder addSliceServiceIdsBuilder(
-          int index) {
-        return getSliceServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.ServiceId slice_service_ids = 4;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ServiceId.Builder> 
-           getSliceServiceIdsBuilderList() {
-        return getSliceServiceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
-          getSliceServiceIdsFieldBuilder() {
-        if (sliceServiceIdsBuilder_ == null) {
-          sliceServiceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
-                  sliceServiceIds_,
-                  ((bitField0_ & 0x00000004) != 0),
-                  getParentForChildren(),
-                  isClean());
-          sliceServiceIds_ = null;
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
-        return sliceServiceIdsBuilder_;
+        return this;
       }
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceSubsliceIds_ =
-        java.util.Collections.emptyList();
-      private void ensureSliceSubsliceIdsIsMutable() {
-        if (!((bitField0_ & 0x00000008) != 0)) {
-          sliceSubsliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceSubsliceIds_);
-          bitField0_ |= 0x00000008;
-         }
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionEvent_descriptor;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceSubsliceIdsBuilder_;
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      }
 
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceSubsliceIdsList() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
-        } else {
-          return sliceSubsliceIdsBuilder_.getMessageList();
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionEvent build() {
+        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
       }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public int getSliceSubsliceIdsCount() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.size();
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionEvent buildPartial() {
+        context.ContextOuterClass.ConnectionEvent result = new context.ContextOuterClass.ConnectionEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
         } else {
-          return sliceSubsliceIdsBuilder_.getCount();
+          result.event_ = eventBuilder_.build();
         }
-      }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public context.ContextOuterClass.SliceId getSliceSubsliceIds(int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.get(index);
+        if (connectionIdBuilder_ == null) {
+          result.connectionId_ = connectionId_;
         } else {
-          return sliceSubsliceIdsBuilder_.getMessage(index);
+          result.connectionId_ = connectionIdBuilder_.build();
         }
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public Builder setSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.set(index, value);
-          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 context.ContextOuterClass.ConnectionEvent) {
+          return mergeFrom((context.ContextOuterClass.ConnectionEvent)other);
         } else {
-          sliceSubsliceIdsBuilder_.setMessage(index, value);
+          super.mergeFrom(other);
+          return this;
         }
-        return this;
       }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public Builder setSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceSubsliceIdsBuilder_.setMessage(index, builderForValue.build());
+
+      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;
       }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public Builder addSliceSubsliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
+
+      @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.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);
           }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(value);
-          onChanged();
-        } else {
-          sliceSubsliceIdsBuilder_.addMessage(value);
         }
         return this;
       }
+
+      private context.ContextOuterClass.Event event_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return Whether the event field is set.
        */
-      public Builder addSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceSubsliceIdsBuilder_.addMessage(index, value);
-        }
-        return this;
+      public boolean hasEvent() {
+        return eventBuilder_ != null || event_ != null;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
+       * @return The event.
        */
-      public Builder addSliceSubsliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(builderForValue.build());
-          onChanged();
+      public context.ContextOuterClass.Event getEvent() {
+        if (eventBuilder_ == null) {
+          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(builderForValue.build());
+          return eventBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addSliceSubsliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.add(index, builderForValue.build());
+      public Builder setEvent(context.ContextOuterClass.Event value) {
+        if (eventBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          event_ = value;
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addMessage(index, builderForValue.build());
+          eventBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder addAllSliceSubsliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceSubsliceIds_);
+      public Builder setEvent(
+          context.ContextOuterClass.Event.Builder builderForValue) {
+        if (eventBuilder_ == null) {
+          event_ = builderForValue.build();
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.addAllMessages(values);
+          eventBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder clearSliceSubsliceIds() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000008);
+      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;
+          }
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.clear();
+          eventBuilder_.mergeFrom(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public Builder removeSliceSubsliceIds(int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          ensureSliceSubsliceIdsIsMutable();
-          sliceSubsliceIds_.remove(index);
+      public Builder clearEvent() {
+        if (eventBuilder_ == null) {
+          event_ = null;
           onChanged();
         } else {
-          sliceSubsliceIdsBuilder_.remove(index);
+          event_ = null;
+          eventBuilder_ = null;
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder getSliceSubsliceIdsBuilder(
-          int index) {
-        return getSliceSubsliceIdsFieldBuilder().getBuilder(index);
-      }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceSubsliceIdsOrBuilder(
-          int index) {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          return sliceSubsliceIds_.get(index);  } else {
-          return sliceSubsliceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+        
+        onChanged();
+        return getEventFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceSubsliceIdsOrBuilderList() {
-        if (sliceSubsliceIdsBuilder_ != null) {
-          return sliceSubsliceIdsBuilder_.getMessageOrBuilderList();
+      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
+        if (eventBuilder_ != null) {
+          return eventBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(sliceSubsliceIds_);
+          return event_ == null ?
+              context.ContextOuterClass.Event.getDefaultInstance() : event_;
         }
       }
       /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder() {
-        return getSliceSubsliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
-       */
-      public context.ContextOuterClass.SliceId.Builder addSliceSubsliceIdsBuilder(
-          int index) {
-        return getSliceSubsliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.SliceId slice_subslice_ids = 5;</code>
+       * <code>.context.Event event = 1;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceSubsliceIdsBuilderList() {
-        return getSliceSubsliceIdsFieldBuilder().getBuilderList();
-      }
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> 
-          getSliceSubsliceIdsFieldBuilder() {
-        if (sliceSubsliceIdsBuilder_ == null) {
-          sliceSubsliceIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-              context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder>(
-                  sliceSubsliceIds_,
-                  ((bitField0_ & 0x00000008) != 0),
+      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());
-          sliceSubsliceIds_ = null;
+          event_ = null;
         }
-        return sliceSubsliceIdsBuilder_;
+        return eventBuilder_;
       }
 
-      private context.ContextOuterClass.SliceStatus sliceStatus_;
+      private context.ContextOuterClass.ConnectionId connectionId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> sliceStatusBuilder_;
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       * @return Whether the sliceStatus field is set.
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return Whether the connectionId field is set.
        */
-      public boolean hasSliceStatus() {
-        return sliceStatusBuilder_ != null || sliceStatus_ != null;
+      public boolean hasConnectionId() {
+        return connectionIdBuilder_ != null || connectionId_ != null;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
-       * @return The sliceStatus.
+       * <code>.context.ConnectionId connection_id = 2;</code>
+       * @return The connectionId.
        */
-      public context.ContextOuterClass.SliceStatus getSliceStatus() {
-        if (sliceStatusBuilder_ == null) {
-          return sliceStatus_ == null ? context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+      public context.ContextOuterClass.ConnectionId getConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         } else {
-          return sliceStatusBuilder_.getMessage();
+          return connectionIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setSliceStatus(context.ContextOuterClass.SliceStatus value) {
-        if (sliceStatusBuilder_ == null) {
+      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceStatus_ = value;
+          connectionId_ = value;
           onChanged();
         } else {
-          sliceStatusBuilder_.setMessage(value);
+          connectionIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder setSliceStatus(
-          context.ContextOuterClass.SliceStatus.Builder builderForValue) {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = builderForValue.build();
+      public Builder setConnectionId(
+          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = builderForValue.build();
           onChanged();
         } else {
-          sliceStatusBuilder_.setMessage(builderForValue.build());
+          connectionIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder mergeSliceStatus(context.ContextOuterClass.SliceStatus value) {
-        if (sliceStatusBuilder_ == null) {
-          if (sliceStatus_ != null) {
-            sliceStatus_ =
-              context.ContextOuterClass.SliceStatus.newBuilder(sliceStatus_).mergeFrom(value).buildPartial();
+      public Builder mergeConnectionId(context.ContextOuterClass.ConnectionId value) {
+        if (connectionIdBuilder_ == null) {
+          if (connectionId_ != null) {
+            connectionId_ =
+              context.ContextOuterClass.ConnectionId.newBuilder(connectionId_).mergeFrom(value).buildPartial();
           } else {
-            sliceStatus_ = value;
+            connectionId_ = value;
           }
           onChanged();
         } else {
-          sliceStatusBuilder_.mergeFrom(value);
+          connectionIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public Builder clearSliceStatus() {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatus_ = null;
+      public Builder clearConnectionId() {
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
           onChanged();
         } else {
-          sliceStatus_ = null;
-          sliceStatusBuilder_ = null;
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.SliceStatus.Builder getSliceStatusBuilder() {
+      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
         
         onChanged();
-        return getSliceStatusFieldBuilder().getBuilder();
+        return getConnectionIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
-      public context.ContextOuterClass.SliceStatusOrBuilder getSliceStatusOrBuilder() {
-        if (sliceStatusBuilder_ != null) {
-          return sliceStatusBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
+        if (connectionIdBuilder_ != null) {
+          return connectionIdBuilder_.getMessageOrBuilder();
         } else {
-          return sliceStatus_ == null ?
-              context.ContextOuterClass.SliceStatus.getDefaultInstance() : sliceStatus_;
+          return connectionId_ == null ?
+              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
         }
       }
       /**
-       * <code>.context.SliceStatus slice_status = 6;</code>
+       * <code>.context.ConnectionId connection_id = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder> 
-          getSliceStatusFieldBuilder() {
-        if (sliceStatusBuilder_ == null) {
-          sliceStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-              context.ContextOuterClass.SliceStatus, context.ContextOuterClass.SliceStatus.Builder, context.ContextOuterClass.SliceStatusOrBuilder>(
-                  getSliceStatus(),
+          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());
-          sliceStatus_ = null;
+          connectionId_ = null;
         }
-        return sliceStatusBuilder_;
+        return connectionIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -30895,82 +45255,119 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Slice)
+      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Slice)
-    private static final context.ContextOuterClass.Slice DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
+    private static final context.ContextOuterClass.ConnectionEvent DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.Slice();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionEvent();
     }
 
-    public static context.ContextOuterClass.Slice getDefaultInstance() {
+    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<Slice>
-        PARSER = new com.google.protobuf.AbstractParser<Slice>() {
+    private static final com.google.protobuf.Parser<ConnectionEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionEvent>() {
       @java.lang.Override
-      public Slice parsePartialFrom(
+      public ConnectionEvent parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Slice(input, extensionRegistry);
+        return new ConnectionEvent(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Slice> parser() {
+    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Slice> getParserForType() {
+    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Slice getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceStatusOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceStatus)
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The enum numeric value on the wire for sliceStatus.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
+     */
+    boolean hasTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
+     */
+    context.ContextOuterClass.TopologyId getTopologyId();
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return Whether the deviceId field is set.
+     */
+    boolean hasDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     * @return The deviceId.
+     */
+    context.ContextOuterClass.DeviceId getDeviceId();
+    /**
+     * <code>.context.DeviceId device_id = 2;</code>
+     */
+    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.
      */
-    int getSliceStatusValue();
+    context.ContextOuterClass.Uuid getEndpointUuid();
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The sliceStatus.
+     * <code>.context.Uuid endpoint_uuid = 3;</code>
      */
-    context.ContextOuterClass.SliceStatusEnum getSliceStatus();
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceStatus}
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
    */
-  public static final class SliceStatus extends
+  public static final class EndPointId extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceStatus)
-      SliceStatusOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceStatus.newBuilder() to construct.
-    private SliceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceStatus() {
-      sliceStatus_ = 0;
+    private EndPointId() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceStatus();
+      return new EndPointId();
     }
 
     @java.lang.Override
@@ -30978,7 +45375,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceStatus(
+    private EndPointId(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -30996,10 +45393,43 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 8: {
-              int rawValue = input.readEnum();
+            case 10: {
+              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
+              if (topologyId_ != null) {
+                subBuilder = topologyId_.toBuilder();
+              }
+              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(topologyId_);
+                topologyId_ = 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();
+              }
+
+              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();
+              }
 
-              sliceStatus_ = rawValue;
               break;
             }
             default: {
@@ -31023,34 +45453,93 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceStatus_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_SliceStatus_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
+              context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
     }
 
-    public static final int SLICE_STATUS_FIELD_NUMBER = 1;
-    private int sliceStatus_;
+    public static final int TOPOLOGY_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.TopologyId topologyId_;
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The enum numeric value on the wire for sliceStatus.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return Whether the topologyId field is set.
      */
-    @java.lang.Override public int getSliceStatusValue() {
-      return sliceStatus_;
+    @java.lang.Override
+    public boolean hasTopologyId() {
+      return topologyId_ != null;
     }
     /**
-     * <code>.context.SliceStatusEnum slice_status = 1;</code>
-     * @return The sliceStatus.
+     * <code>.context.TopologyId topology_id = 1;</code>
+     * @return The topologyId.
      */
-    @java.lang.Override public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-      @SuppressWarnings("deprecation")
-      context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
-      return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyId getTopologyId() {
+      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
+    }
+    /**
+     * <code>.context.TopologyId topology_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
+      return getTopologyId();
+    }
+
+    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.
+     */
+    @java.lang.Override
+    public boolean hasDeviceId() {
+      return deviceId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId device_id = 2;</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 = 2;</code>
+     */
+    @java.lang.Override
+    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;
@@ -31067,8 +45556,14 @@ public final class ContextOuterClass {
     @java.lang.Override
     public void writeTo(com.google.protobuf.CodedOutputStream output)
                         throws java.io.IOException {
-      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
-        output.writeEnum(1, sliceStatus_);
+      if (topologyId_ != null) {
+        output.writeMessage(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
       }
       unknownFields.writeTo(output);
     }
@@ -31079,9 +45574,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (sliceStatus_ != context.ContextOuterClass.SliceStatusEnum.SLICESTATUS_UNDEFINED.getNumber()) {
+      if (topologyId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, sliceStatus_);
+          .computeMessageSize(1, getTopologyId());
+      }
+      if (deviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getEndpointUuid());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -31093,12 +45596,26 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceStatus)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceStatus other = (context.ContextOuterClass.SliceStatus) obj;
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
 
-      if (sliceStatus_ != other.sliceStatus_) return false;
+      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 (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) return false;
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -31110,76 +45627,86 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + SLICE_STATUS_FIELD_NUMBER;
-      hash = (53 * hash) + sliceStatus_;
+      if (hasTopologyId()) {
+        hash = (37 * hash) + TOPOLOGY_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getTopologyId().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.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus 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.SliceStatus 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.SliceStatus 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.SliceStatus parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPointId parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceStatus 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.SliceStatus 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.SliceStatus 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.SliceStatus 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.SliceStatus 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.SliceStatus 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.SliceStatus parseFrom(
+    public static context.ContextOuterClass.EndPointId parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -31192,7 +45719,7 @@ public final class ContextOuterClass {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(context.ContextOuterClass.SliceStatus prototype) {
+    public static Builder newBuilder(context.ContextOuterClass.EndPointId prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -31208,204 +45735,547 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceStatus}
+     * <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.SliceStatus)
-        context.ContextOuterClass.SliceStatusOrBuilder {
+        // @@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_SliceStatus_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_SliceStatus_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPointId_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceStatus.class, context.ContextOuterClass.SliceStatus.Builder.class);
+                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.EndPointId.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 (topologyIdBuilder_ == null) {
+          topologyId_ = null;
+        } else {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId build() {
+        context.ContextOuterClass.EndPointId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPointId buildPartial() {
+        context.ContextOuterClass.EndPointId result = new context.ContextOuterClass.EndPointId(this);
+        if (topologyIdBuilder_ == null) {
+          result.topologyId_ = topologyId_;
+        } else {
+          result.topologyId_ = topologyIdBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.build();
+        }
+        if (endpointUuidBuilder_ == null) {
+          result.endpointUuid_ = endpointUuid_;
+        } else {
+          result.endpointUuid_ = endpointUuidBuilder_.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.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 {
+          topologyId_ = null;
+          topologyIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.TopologyId topology_id = 1;</code>
+       */
+      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
+        
+        onChanged();
+        return getTopologyIdFieldBuilder().getBuilder();
       }
-
-      // Construct using context.ContextOuterClass.SliceStatus.newBuilder()
-      private Builder() {
-        maybeForceBuilderInitialization();
+      /**
+       * <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_;
+        }
+      }
+      /**
+       * <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 Builder(
-          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
-        super(parent);
-        maybeForceBuilderInitialization();
+      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.
+       */
+      public boolean hasDeviceId() {
+        return deviceIdBuilder_ != null || deviceId_ != null;
       }
-      private void maybeForceBuilderInitialization() {
-        if (com.google.protobuf.GeneratedMessageV3
-                .alwaysUseFieldBuilders) {
+      /**
+       * <code>.context.DeviceId device_id = 2;</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 Builder clear() {
-        super.clear();
-        sliceStatus_ = 0;
+      /**
+       * <code>.context.DeviceId device_id = 2;</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 = 2;</code>
+       */
+      public Builder setDeviceId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          deviceIdBuilder_.setMessage(builderForValue.build());
+        }
 
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceStatus_descriptor;
-      }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceStatus.getDefaultInstance();
+        return this;
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.SliceStatus build() {
-        context.ContextOuterClass.SliceStatus result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>.context.DeviceId device_id = 2;</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 result;
-      }
 
-      @java.lang.Override
-      public context.ContextOuterClass.SliceStatus buildPartial() {
-        context.ContextOuterClass.SliceStatus result = new context.ContextOuterClass.SliceStatus(this);
-        result.sliceStatus_ = sliceStatus_;
-        onBuilt();
-        return result;
+        return this;
       }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
 
-      @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);
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
+        
+        onChanged();
+        return getDeviceIdFieldBuilder().getBuilder();
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
+        if (deviceIdBuilder_ != null) {
+          return deviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return deviceId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
+        }
       }
-      @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>.context.DeviceId device_id = 2;</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_;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+
+      private context.ContextOuterClass.Uuid endpointUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return Whether the endpointUuid field is set.
+       */
+      public boolean hasEndpointUuid() {
+        return endpointUuidBuilder_ != null || endpointUuid_ != null;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.SliceStatus) {
-          return mergeFrom((context.ContextOuterClass.SliceStatus)other);
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * @return The endpointUuid.
+       */
+      public context.ContextOuterClass.Uuid getEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         } else {
-          super.mergeFrom(other);
-          return this;
+          return endpointUuidBuilder_.getMessage();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.SliceStatus other) {
-        if (other == context.ContextOuterClass.SliceStatus.getDefaultInstance()) return this;
-        if (other.sliceStatus_ != 0) {
-          setSliceStatusValue(other.getSliceStatusValue());
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointUuid_ = value;
+          onChanged();
+        } else {
+          endpointUuidBuilder_.setMessage(value);
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
+
         return this;
       }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder setEndpointUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointUuidBuilder_.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 {
-        context.ContextOuterClass.SliceStatus parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceStatus) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
+        if (endpointUuidBuilder_ == null) {
+          if (endpointUuid_ != null) {
+            endpointUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
+          } else {
+            endpointUuid_ = value;
           }
+          onChanged();
+        } else {
+          endpointUuidBuilder_.mergeFrom(value);
         }
+
         return this;
       }
-
-      private int sliceStatus_ = 0;
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return The enum numeric value on the wire for sliceStatus.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      @java.lang.Override public int getSliceStatusValue() {
-        return sliceStatus_;
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+          onChanged();
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
+        }
+
+        return this;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @param value The enum numeric value on the wire for sliceStatus to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setSliceStatusValue(int value) {
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
         
-        sliceStatus_ = value;
         onChanged();
-        return this;
-      }
-      /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return The sliceStatus.
-       */
-      @java.lang.Override
-      public context.ContextOuterClass.SliceStatusEnum getSliceStatus() {
-        @SuppressWarnings("deprecation")
-        context.ContextOuterClass.SliceStatusEnum result = context.ContextOuterClass.SliceStatusEnum.valueOf(sliceStatus_);
-        return result == null ? context.ContextOuterClass.SliceStatusEnum.UNRECOGNIZED : result;
+        return getEndpointUuidFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @param value The sliceStatus to set.
-       * @return This builder for chaining.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder setSliceStatus(context.ContextOuterClass.SliceStatusEnum value) {
-        if (value == null) {
-          throw new NullPointerException();
+      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
+        if (endpointUuidBuilder_ != null) {
+          return endpointUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
         }
-        
-        sliceStatus_ = value.getNumber();
-        onChanged();
-        return this;
       }
       /**
-       * <code>.context.SliceStatusEnum slice_status = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
        */
-      public Builder clearSliceStatus() {
-        
-        sliceStatus_ = 0;
-        onChanged();
-        return this;
+      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(),
+                  getParentForChildren(),
+                  isClean());
+          endpointUuid_ = null;
+        }
+        return endpointUuidBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -31420,95 +46290,143 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceStatus)
+      // @@protoc_insertion_point(builder_scope:context.EndPointId)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceStatus)
-    private static final context.ContextOuterClass.SliceStatus DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceStatus();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
     }
 
-    public static context.ContextOuterClass.SliceStatus getDefaultInstance() {
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<SliceStatus>
-        PARSER = new com.google.protobuf.AbstractParser<SliceStatus>() {
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
       @java.lang.Override
-      public SliceStatus parsePartialFrom(
+      public EndPointId parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceStatus(input, extensionRegistry);
+        return new EndPointId(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceStatus> parser() {
+    public static com.google.protobuf.Parser<EndPointId> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceStatus> getParserForType() {
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceStatus getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceIdList)
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    java.util.List<context.ContextOuterClass.SliceId> 
-        getSliceIdsList();
+    boolean hasEndpointId();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.SliceId getSliceIds(int index);
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    int getSliceIdsCount();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList();
+    java.lang.String getEndpointType();
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-        int index);
+    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);
+
+    /**
+     * <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.
+     */
+    context.ContextOuterClass.Location getEndpointLocation();
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     */
+    context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceIdList}
+   * Protobuf type {@code context.EndPoint}
    */
-  public static final class SliceIdList extends
+  public static final class EndPoint extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceIdList)
-      SliceIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceIdList.newBuilder() to construct.
-    private SliceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceIdList() {
-      sliceIds_ = java.util.Collections.emptyList();
+    private EndPoint() {
+      endpointType_ = "";
+      kpiSampleTypes_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceIdList();
+      return new EndPoint();
     }
 
     @java.lang.Override
@@ -31516,7 +46434,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceIdList(
+    private EndPoint(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -31535,13 +46453,59 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>();
-                mutable_bitField0_ |= 0x00000001;
+            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);
+              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);
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (endpointLocation_ != null) {
+                subBuilder = endpointLocation_.toBuilder();
               }
-              sliceIds_.add(
-                  input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry));
+              endpointLocation_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointLocation_);
+                endpointLocation_ = subBuilder.buildPartial();
+              }
+
               break;
             }
             default: {
@@ -31560,7 +46524,7 @@ public final class ContextOuterClass {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
+          kpiSampleTypes_ = java.util.Collections.unmodifiableList(kpiSampleTypes_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -31568,55 +46532,163 @@ 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_EndPoint_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_EndPoint_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+              context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
     }
 
-    public static final int SLICE_IDS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.SliceId> sliceIds_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-      return sliceIds_;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-        getSliceIdsOrBuilderList() {
-      return sliceIds_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public int getSliceIdsCount() {
-      return sliceIds_.size();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
+
+    public static final int ENDPOINT_TYPE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object endpointType_;
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string endpoint_type = 2;</code>
+     * @return The endpointType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceIds(int index) {
-      return sliceIds_.get(index);
+    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;
+      }
     }
     /**
-     * <code>repeated .context.SliceId slice_ids = 1;</code>
+     * <code>string endpoint_type = 2;</code>
+     * @return The bytes for endpointType.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-        int index) {
-      return sliceIds_.get(index);
+    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>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;
+    }
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     * @return The endpointLocation.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Location getEndpointLocation() {
+      return endpointLocation_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+    }
+    /**
+     * <code>.context.Location endpoint_location = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+      return getEndpointLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -31633,8 +46705,22 @@ 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));
+      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 (endpointLocation_ != null) {
+        output.writeMessage(4, getEndpointLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -31645,9 +46731,28 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < sliceIds_.size(); i++) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, sliceIds_.get(i));
+          .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 (endpointLocation_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getEndpointLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -31659,13 +46764,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceIdList other = (context.ContextOuterClass.SliceIdList) obj;
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
 
-      if (!getSliceIdsList()
-          .equals(other.getSliceIdsList())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) 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;
     }
@@ -31677,78 +46793,88 @@ 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 (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 = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.SliceIdList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList 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.SliceIdList 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.SliceIdList 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.SliceIdList parseFrom(byte[] data)
+    public static context.ContextOuterClass.EndPoint parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.SliceIdList 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.SliceIdList 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.SliceIdList 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.SliceIdList 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.SliceIdList 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.SliceIdList 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.SliceIdList parseFrom(
+    public static context.ContextOuterClass.EndPoint parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -31761,7 +46887,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.EndPoint prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -31777,26 +46903,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceIdList}
+     * Protobuf type {@code context.EndPoint}
      */
     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.EndPoint)
+        context.ContextOuterClass.EndPointOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_SliceIdList_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_SliceIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_EndPoint_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceIdList.class, context.ContextOuterClass.SliceIdList.Builder.class);
+                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceIdList.newBuilder()
+      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -31809,17 +46935,26 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSliceIdsFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          sliceIdsBuilder_.clear();
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        endpointType_ = "";
+
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
+        } else {
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
         return this;
       }
@@ -31827,17 +46962,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_EndPoint_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceIdList.getDefaultInstance();
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList build() {
-        context.ContextOuterClass.SliceIdList result = buildPartial();
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -31845,17 +46980,24 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceIdList buildPartial() {
-        context.ContextOuterClass.SliceIdList result = new context.ContextOuterClass.SliceIdList(this);
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
         int from_bitField0_ = bitField0_;
-        if (sliceIdsBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0)) {
-            sliceIds_ = java.util.Collections.unmodifiableList(sliceIds_);
-            bitField0_ = (bitField0_ & ~0x00000001);
-          }
-          result.sliceIds_ = sliceIds_;
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.sliceIds_ = sliceIdsBuilder_.build();
+          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();
         }
         onBuilt();
         return result;
@@ -31895,310 +47037,518 @@ 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.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)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_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-            } else {
-              ensureSliceIdsIsMutable();
-              sliceIds_.addAll(other.sliceIds_);
-            }
-            onChanged();
+      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();
+        } else {
+          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.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 {
-          if (!other.sliceIds_.isEmpty()) {
-            if (sliceIdsBuilder_.isEmpty()) {
-              sliceIdsBuilder_.dispose();
-              sliceIdsBuilder_ = null;
-              sliceIds_ = other.sliceIds_;
-              bitField0_ = (bitField0_ & ~0x00000001);
-              sliceIdsBuilder_ = 
-                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getSliceIdsFieldBuilder() : null;
-            } else {
-              sliceIdsBuilder_.addAllMessages(other.sliceIds_);
-            }
-          }
+          return (com.google.protobuf.ByteString) ref;
         }
-        this.mergeUnknownFields(other.unknownFields);
+      }
+      /**
+       * <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;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndpointType() {
+        
+        endpointType_ = getDefaultInstance().getEndpointType();
+        onChanged();
+        return this;
       }
-
-      @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.SliceIdList parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceIdList) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
-          }
-        }
+      /**
+       * <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 int bitField0_;
 
-      private java.util.List<context.ContextOuterClass.SliceId> sliceIds_ =
+      private java.util.List<java.lang.Integer> kpiSampleTypes_ =
         java.util.Collections.emptyList();
-      private void ensureSliceIdsIsMutable() {
+      private void ensureKpiSampleTypesIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          sliceIds_ = new java.util.ArrayList<context.ContextOuterClass.SliceId>(sliceIds_);
+          kpiSampleTypes_ = new java.util.ArrayList<java.lang.Integer>(kpiSampleTypes_);
           bitField0_ |= 0x00000001;
-         }
+        }
       }
-
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdsBuilder_;
-
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return A list containing the kpiSampleTypes.
        */
-      public java.util.List<context.ContextOuterClass.SliceId> getSliceIdsList() {
-        if (sliceIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(sliceIds_);
-        } else {
-          return sliceIdsBuilder_.getMessageList();
-        }
+      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 .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return The count of kpiSampleTypes.
        */
-      public int getSliceIdsCount() {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.size();
-        } else {
-          return sliceIdsBuilder_.getCount();
-        }
+      public int getKpiSampleTypesCount() {
+        return kpiSampleTypes_.size();
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <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.SliceId getSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);
-        } else {
-          return sliceIdsBuilder_.getMessage(index);
-        }
+      public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
+        return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</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 setSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.setMessage(index, 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>repeated .context.SliceId slice_ids = 1;</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 setSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceIdsBuilder_.setMessage(index, 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>repeated .context.SliceId slice_ids = 1;</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 addSliceIds(context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(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>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
+       * @return This builder for chaining.
        */
-      public Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId value) {
-        if (sliceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, value);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(index, value);
-        }
+      public Builder clearKpiSampleTypes() {
+        kpiSampleTypes_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</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 Builder addSliceIds(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(builderForValue.build());
-        }
+      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 this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</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 Builder addSliceIds(
-          int index, context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addMessage(index, builderForValue.build());
-        }
+      public Builder addKpiSampleTypesValue(int value) {
+        ensureKpiSampleTypesIsMutable();
+        kpiSampleTypes_.add(value);
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</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.
        */
-      public Builder addAllSliceIds(
-          java.lang.Iterable<? extends context.ContextOuterClass.SliceId> values) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, sliceIds_);
-          onChanged();
-        } else {
-          sliceIdsBuilder_.addAllMessages(values);
+      public Builder addAllKpiSampleTypesValue(
+          java.lang.Iterable<java.lang.Integer> values) {
+        ensureKpiSampleTypesIsMutable();
+        for (int value : values) {
+          kpiSampleTypes_.add(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>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
+       * @return Whether the endpointLocation field is set.
        */
-      public Builder clearSliceIds() {
-        if (sliceIdsBuilder_ == null) {
-          sliceIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
+      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 {
-          sliceIdsBuilder_.clear();
+          return endpointLocationBuilder_.getMessage();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public Builder removeSliceIds(int index) {
-        if (sliceIdsBuilder_ == null) {
-          ensureSliceIdsIsMutable();
-          sliceIds_.remove(index);
+      public Builder setEndpointLocation(context.ContextOuterClass.Location value) {
+        if (endpointLocationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          endpointLocation_ = value;
           onChanged();
         } else {
-          sliceIdsBuilder_.remove(index);
+          endpointLocationBuilder_.setMessage(value);
         }
+
         return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdsBuilder(
-          int index) {
-        return getSliceIdsFieldBuilder().getBuilder(index);
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdsOrBuilder(
-          int index) {
-        if (sliceIdsBuilder_ == null) {
-          return sliceIds_.get(index);  } else {
-          return sliceIdsBuilder_.getMessageOrBuilder(index);
+      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);
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.SliceIdOrBuilder> 
-           getSliceIdsOrBuilderList() {
-        if (sliceIdsBuilder_ != null) {
-          return sliceIdsBuilder_.getMessageOrBuilderList();
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          endpointLocation_ = null;
+          onChanged();
         } else {
-          return java.util.Collections.unmodifiableList(sliceIds_);
+          endpointLocation_ = null;
+          endpointLocationBuilder_ = null;
         }
+
+        return this;
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder() {
-        return getSliceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.Location.Builder getEndpointLocationBuilder() {
+        
+        onChanged();
+        return getEndpointLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder addSliceIdsBuilder(
-          int index) {
-        return getSliceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.SliceId.getDefaultInstance());
+      public context.ContextOuterClass.LocationOrBuilder getEndpointLocationOrBuilder() {
+        if (endpointLocationBuilder_ != null) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
+        } else {
+          return endpointLocation_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : endpointLocation_;
+        }
       }
       /**
-       * <code>repeated .context.SliceId slice_ids = 1;</code>
+       * <code>.context.Location endpoint_location = 4;</code>
        */
-      public java.util.List<context.ContextOuterClass.SliceId.Builder> 
-           getSliceIdsBuilderList() {
-        return getSliceIdsFieldBuilder().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_,
-                  ((bitField0_ & 0x00000001) != 0),
+      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());
-          sliceIds_ = null;
+          endpointLocation_ = null;
         }
-        return sliceIdsBuilder_;
+        return endpointLocationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -32213,95 +47563,96 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceIdList)
+      // @@protoc_insertion_point(builder_scope:context.EndPoint)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceIdList)
-    private static final context.ContextOuterClass.SliceIdList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.SliceIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
     }
 
-    public static context.ContextOuterClass.SliceIdList getDefaultInstance() {
+    public static context.ContextOuterClass.EndPoint 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<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
       @java.lang.Override
-      public SliceIdList parsePartialFrom(
+      public EndPoint parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceIdList(input, extensionRegistry);
+        return new EndPoint(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceIdList> parser() {
+    public static com.google.protobuf.Parser<EndPoint> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceIdList> getParserForType() {
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceList)
+  public interface ConfigRule_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_Custom)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    java.util.List<context.ContextOuterClass.Slice> 
-        getSlicesList();
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
-    context.ContextOuterClass.Slice getSlices(int index);
+    java.lang.String getResourceKey();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
-    int getSlicesCount();
+    com.google.protobuf.ByteString
+        getResourceKeyBytes();
+
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
-    java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList();
+    java.lang.String getResourceValue();
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
-    context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
   }
   /**
-   * Protobuf type {@code context.SliceList}
+   * Protobuf type {@code context.ConfigRule_Custom}
    */
-  public static final class SliceList extends
+  public static final class ConfigRule_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceList)
-      SliceListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_Custom)
+      ConfigRule_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceList.newBuilder() to construct.
-    private SliceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_Custom.newBuilder() to construct.
+    private ConfigRule_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceList() {
-      slices_ = java.util.Collections.emptyList();
+    private ConfigRule_Custom() {
+      resourceKey_ = "";
+      resourceValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceList();
+      return new ConfigRule_Custom();
     }
 
     @java.lang.Override
@@ -32309,7 +47660,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceList(
+    private ConfigRule_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -32317,7 +47668,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 {
@@ -32329,12 +47679,15 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              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));
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceValue_ = s;
               break;
             }
             default: {
@@ -32352,64 +47705,97 @@ 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_SliceList_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_SliceList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+              context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
     }
 
-    public static final int SLICES_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Slice> slices_;
-    /**
-     * <code>repeated .context.Slice slices = 1;</code>
-     */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-      return slices_;
-    }
+    public static final int RESOURCE_KEY_FIELD_NUMBER = 1;
+    private volatile java.lang.Object resourceKey_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The resourceKey.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-        getSlicesOrBuilderList() {
-      return slices_;
+    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;
+      }
     }
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_key = 1;</code>
+     * @return The bytes for resourceKey.
      */
     @java.lang.Override
-    public int getSlicesCount() {
-      return slices_.size();
+    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 static final int RESOURCE_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object resourceValue_;
     /**
-     * <code>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Slice getSlices(int index) {
-      return slices_.get(index);
+    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>repeated .context.Slice slices = 1;</code>
+     * <code>string resource_value = 2;</code>
+     * @return The bytes for resourceValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceOrBuilder getSlicesOrBuilder(
-        int index) {
-      return slices_.get(index);
+    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;
@@ -32426,8 +47812,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 < slices_.size(); i++) {
-        output.writeMessage(1, slices_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -32438,9 +47827,11 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < slices_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, slices_.get(i));
+      if (!getResourceKeyBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, resourceKey_);
+      }
+      if (!getResourceValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -32452,13 +47843,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceList)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_Custom)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceList other = (context.ContextOuterClass.SliceList) obj;
+      context.ContextOuterClass.ConfigRule_Custom other = (context.ContextOuterClass.ConfigRule_Custom) obj;
 
-      if (!getSlicesList()
-          .equals(other.getSlicesList())) return false;
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -32470,78 +47863,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();
-      }
+      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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList 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.SliceList parseFrom(
+    public static context.ContextOuterClass.ConfigRule_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -32554,7 +47947,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.ConfigRule_Custom prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -32570,26 +47963,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceList}
+     * 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.SliceList)
-        context.ContextOuterClass.SliceListOrBuilder {
+        // @@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_SliceList_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_SliceList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceList.class, context.ContextOuterClass.SliceList.Builder.class);
+                context.ContextOuterClass.ConfigRule_Custom.class, context.ContextOuterClass.ConfigRule_Custom.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceList.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_Custom.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -32602,35 +47995,32 @@ public final class ContextOuterClass {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getSlicesFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-        } else {
-          slicesBuilder_.clear();
-        }
+        resourceKey_ = "";
+
+        resourceValue_ = "";
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_SliceList_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_Custom_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceList.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceList build() {
-        context.ContextOuterClass.SliceList result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_Custom build() {
+        context.ContextOuterClass.ConfigRule_Custom result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -32638,18 +48028,10 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      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.slices_ = slicesBuilder_.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;
       }
@@ -32688,41 +48070,23 @@ 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.ConfigRule_Custom) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_Custom)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_;
-              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_);
-            }
-          }
+      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();
+        }
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          onChanged();
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -32739,11 +48103,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.ConfigRule_Custom parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_Custom) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -32752,247 +48116,158 @@ 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 java.lang.Object resourceKey_ = "";
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.Slice> getSlicesList() {
-        if (slicesBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(slices_);
-        } else {
-          return slicesBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public int getSlicesCount() {
-        if (slicesBuilder_ == null) {
-          return slices_.size();
-        } else {
-          return slicesBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @return The resourceKey.
        */
-      public context.ContextOuterClass.Slice getSlices(int index) {
-        if (slicesBuilder_ == null) {
-          return slices_.get(index);
+      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;
         } else {
-          return slicesBuilder_.getMessage(index);
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @return The bytes for resourceKey.
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSlicesIsMutable();
-          slices_.set(index, value);
-          onChanged();
+      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;
         } else {
-          slicesBuilder_.setMessage(index, value);
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @param value The resourceKey to set.
+       * @return This builder for chaining.
        */
-      public Builder setSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          slicesBuilder_.setMessage(index, builderForValue.build());
-        }
+      public Builder setResourceKey(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceKey_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder addSlices(context.ContextOuterClass.Slice value) {
-        if (slicesBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSlicesIsMutable();
-          slices_.add(value);
-          onChanged();
-        } else {
-          slicesBuilder_.addMessage(value);
-        }
+      public Builder clearResourceKey() {
+        
+        resourceKey_ = getDefaultInstance().getResourceKey();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_key = 1;</code>
+       * @param value The bytes for resourceKey to set.
+       * @return This builder for chaining.
        */
-      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 {
-          slicesBuilder_.addMessage(index, value);
-        }
+      public Builder setResourceKeyBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceKey_ = value;
+        onChanged();
         return this;
       }
+
+      private java.lang.Object resourceValue_ = "";
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The resourceValue.
        */
-      public Builder addSlices(
-          context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(builderForValue.build());
-          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 {
-          slicesBuilder_.addMessage(builderForValue.build());
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @return The bytes for resourceValue.
        */
-      public Builder addSlices(
-          int index, context.ContextOuterClass.Slice.Builder builderForValue) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.add(index, 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 {
-          slicesBuilder_.addMessage(index, builderForValue.build());
+          return (com.google.protobuf.ByteString) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The resourceValue to set.
+       * @return This builder for chaining.
        */
-      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 {
-          slicesBuilder_.addAllMessages(values);
-        }
+      public Builder setResourceValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        resourceValue_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @return This builder for chaining.
        */
-      public Builder clearSlices() {
-        if (slicesBuilder_ == null) {
-          slices_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          slicesBuilder_.clear();
-        }
+      public Builder clearResourceValue() {
+        
+        resourceValue_ = getDefaultInstance().getResourceValue();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Slice slices = 1;</code>
+       * <code>string resource_value = 2;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
        */
-      public Builder removeSlices(int index) {
-        if (slicesBuilder_ == null) {
-          ensureSlicesIsMutable();
-          slices_.remove(index);
-          onChanged();
-        } else {
-          slicesBuilder_.remove(index);
-        }
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceValue_ = value;
+        onChanged();
         return this;
       }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      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);
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public java.util.List<? extends context.ContextOuterClass.SliceOrBuilder> 
-           getSlicesOrBuilderList() {
-        if (slicesBuilder_ != null) {
-          return slicesBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(slices_);
-        }
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder() {
-        return getSlicesFieldBuilder().addBuilder(
-            context.ContextOuterClass.Slice.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      public context.ContextOuterClass.Slice.Builder addSlicesBuilder(
-          int index) {
-        return getSlicesFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Slice.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Slice slices = 1;</code>
-       */
-      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());
-          slices_ = null;
-        }
-        return slicesBuilder_;
-      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -33006,100 +48281,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceList)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_Custom)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceList)
-    private static final context.ContextOuterClass.SliceList 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.SliceList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_Custom();
     }
 
-    public static context.ContextOuterClass.SliceList getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_Custom 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<ConfigRule_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_Custom>() {
       @java.lang.Override
-      public SliceList parsePartialFrom(
+      public ConfigRule_Custom parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceList(input, extensionRegistry);
+        return new ConfigRule_Custom(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceList> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_Custom> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceList> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_Custom> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceList getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_Custom getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface SliceEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.SliceEvent)
+  public interface ConfigRule_ACLOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule_ACL)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasEvent();
+    boolean hasEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
-    boolean hasSliceId();
+    boolean hasRuleSet();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
-    context.ContextOuterClass.SliceId getSliceId();
+    acl.Acl.AclRuleSet getRuleSet();
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
      */
-    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+    acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder();
   }
   /**
-   * Protobuf type {@code context.SliceEvent}
+   * Protobuf type {@code context.ConfigRule_ACL}
    */
-  public static final class SliceEvent extends
+  public static final class ConfigRule_ACL extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.SliceEvent)
-      SliceEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule_ACL)
+      ConfigRule_ACLOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use SliceEvent.newBuilder() to construct.
-    private SliceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule_ACL.newBuilder() to construct.
+    private ConfigRule_ACL(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private SliceEvent() {
+    private ConfigRule_ACL() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new SliceEvent();
+      return new ConfigRule_ACL();
     }
 
     @java.lang.Override
@@ -33107,7 +48382,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private SliceEvent(
+    private ConfigRule_ACL(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33126,27 +48401,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.SliceId.Builder subBuilder = null;
-              if (sliceId_ != null) {
-                subBuilder = sliceId_.toBuilder();
+              acl.Acl.AclRuleSet.Builder subBuilder = null;
+              if (ruleSet_ != null) {
+                subBuilder = ruleSet_.toBuilder();
               }
-              sliceId_ = input.readMessage(context.ContextOuterClass.SliceId.parser(), extensionRegistry);
+              ruleSet_ = input.readMessage(acl.Acl.AclRuleSet.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(sliceId_);
-                sliceId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(ruleSet_);
+                ruleSet_ = subBuilder.buildPartial();
               }
 
               break;
@@ -33172,67 +48447,67 @@ public final class ContextOuterClass {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_SliceEvent_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_SliceEvent_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+              context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int SLICE_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.SliceId sliceId_;
+    public static final int RULE_SET_FIELD_NUMBER = 2;
+    private acl.Acl.AclRuleSet ruleSet_;
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return Whether the sliceId field is set.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return Whether the ruleSet field is set.
      */
     @java.lang.Override
-    public boolean hasSliceId() {
-      return sliceId_ != null;
+    public boolean hasRuleSet() {
+      return ruleSet_ != null;
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
-     * @return The sliceId.
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
+     * @return The ruleSet.
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceId getSliceId() {
-      return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+    public acl.Acl.AclRuleSet getRuleSet() {
+      return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
     }
     /**
-     * <code>.context.SliceId slice_id = 2;</code>
+     * <code>.acl.AclRuleSet rule_set = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-      return getSliceId();
+    public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+      return getRuleSet();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -33249,11 +48524,11 @@ 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 (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (sliceId_ != null) {
-        output.writeMessage(2, getSliceId());
+      if (ruleSet_ != null) {
+        output.writeMessage(2, getRuleSet());
       }
       unknownFields.writeTo(output);
     }
@@ -33264,13 +48539,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (sliceId_ != null) {
+      if (ruleSet_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getSliceId());
+          .computeMessageSize(2, getRuleSet());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -33282,20 +48557,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.SliceEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule_ACL)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.SliceEvent other = (context.ContextOuterClass.SliceEvent) obj;
+      context.ContextOuterClass.ConfigRule_ACL other = (context.ContextOuterClass.ConfigRule_ACL) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
-      if (hasSliceId() != other.hasSliceId()) return false;
-      if (hasSliceId()) {
-        if (!getSliceId()
-            .equals(other.getSliceId())) 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;
@@ -33308,82 +48583,82 @@ 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 (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasSliceId()) {
-        hash = (37 * hash) + SLICE_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getSliceId().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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent 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.SliceEvent parseFrom(
+    public static context.ContextOuterClass.ConfigRule_ACL parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -33396,7 +48671,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.ConfigRule_ACL prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -33412,26 +48687,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.SliceEvent}
+     * 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.SliceEvent)
-        context.ContextOuterClass.SliceEventOrBuilder {
+        // @@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_SliceEvent_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_SliceEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_ACL_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.SliceEvent.class, context.ContextOuterClass.SliceEvent.Builder.class);
+                context.ContextOuterClass.ConfigRule_ACL.class, context.ContextOuterClass.ConfigRule_ACL.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.SliceEvent.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule_ACL.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -33449,17 +48724,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
         return this;
       }
@@ -33467,17 +48742,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_ConfigRule_ACL_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.SliceEvent.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.SliceEvent build() {
-        context.ContextOuterClass.SliceEvent result = buildPartial();
+      public context.ContextOuterClass.ConfigRule_ACL build() {
+        context.ContextOuterClass.ConfigRule_ACL result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -33485,17 +48760,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_;
+      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.event_ = eventBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (sliceIdBuilder_ == null) {
-          result.sliceId_ = sliceId_;
+        if (ruleSetBuilder_ == null) {
+          result.ruleSet_ = ruleSet_;
         } else {
-          result.sliceId_ = sliceIdBuilder_.build();
+          result.ruleSet_ = ruleSetBuilder_.build();
         }
         onBuilt();
         return result;
@@ -33535,21 +48810,21 @@ 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.ConfigRule_ACL) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule_ACL)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());
+      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.hasSliceId()) {
-          mergeSliceId(other.getSliceId());
+        if (other.hasRuleSet()) {
+          mergeRuleSet(other.getRuleSet());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -33566,11 +48841,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.ConfigRule_ACL parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.SliceEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule_ACL) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -33580,242 +48855,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return eventBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</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 mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 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(),
+          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());
-          event_ = null;
+          endpointId_ = null;
         }
-        return eventBuilder_;
+        return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.SliceId sliceId_;
+      private acl.Acl.AclRuleSet ruleSet_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.SliceId, context.ContextOuterClass.SliceId.Builder, context.ContextOuterClass.SliceIdOrBuilder> sliceIdBuilder_;
+          acl.Acl.AclRuleSet, acl.Acl.AclRuleSet.Builder, acl.Acl.AclRuleSetOrBuilder> ruleSetBuilder_;
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return Whether the sliceId field is set.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return Whether the ruleSet field is set.
        */
-      public boolean hasSliceId() {
-        return sliceIdBuilder_ != null || sliceId_ != null;
+      public boolean hasRuleSet() {
+        return ruleSetBuilder_ != null || ruleSet_ != null;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
-       * @return The sliceId.
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
+       * @return The ruleSet.
        */
-      public context.ContextOuterClass.SliceId getSliceId() {
-        if (sliceIdBuilder_ == null) {
-          return sliceId_ == null ? context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+      public acl.Acl.AclRuleSet getRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          return ruleSet_ == null ? acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
         } else {
-          return sliceIdBuilder_.getMessage();
+          return ruleSetBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setSliceId(context.ContextOuterClass.SliceId value) {
-        if (sliceIdBuilder_ == null) {
+      public Builder setRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          sliceId_ = value;
+          ruleSet_ = value;
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(value);
+          ruleSetBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder setSliceId(
-          context.ContextOuterClass.SliceId.Builder builderForValue) {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = builderForValue.build();
+      public Builder setRuleSet(
+          acl.Acl.AclRuleSet.Builder builderForValue) {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = builderForValue.build();
           onChanged();
         } else {
-          sliceIdBuilder_.setMessage(builderForValue.build());
+          ruleSetBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</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 mergeRuleSet(acl.Acl.AclRuleSet value) {
+        if (ruleSetBuilder_ == null) {
+          if (ruleSet_ != null) {
+            ruleSet_ =
+              acl.Acl.AclRuleSet.newBuilder(ruleSet_).mergeFrom(value).buildPartial();
           } else {
-            sliceId_ = value;
+            ruleSet_ = value;
           }
           onChanged();
         } else {
-          sliceIdBuilder_.mergeFrom(value);
+          ruleSetBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public Builder clearSliceId() {
-        if (sliceIdBuilder_ == null) {
-          sliceId_ = null;
+      public Builder clearRuleSet() {
+        if (ruleSetBuilder_ == null) {
+          ruleSet_ = null;
           onChanged();
         } else {
-          sliceId_ = null;
-          sliceIdBuilder_ = null;
+          ruleSet_ = null;
+          ruleSetBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+      public acl.Acl.AclRuleSet.Builder getRuleSetBuilder() {
         
         onChanged();
-        return getSliceIdFieldBuilder().getBuilder();
+        return getRuleSetFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 2;</code>
        */
-      public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
-        if (sliceIdBuilder_ != null) {
-          return sliceIdBuilder_.getMessageOrBuilder();
+      public acl.Acl.AclRuleSetOrBuilder getRuleSetOrBuilder() {
+        if (ruleSetBuilder_ != null) {
+          return ruleSetBuilder_.getMessageOrBuilder();
         } else {
-          return sliceId_ == null ?
-              context.ContextOuterClass.SliceId.getDefaultInstance() : sliceId_;
+          return ruleSet_ == null ?
+              acl.Acl.AclRuleSet.getDefaultInstance() : ruleSet_;
         }
       }
       /**
-       * <code>.context.SliceId slice_id = 2;</code>
+       * <code>.acl.AclRuleSet rule_set = 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(),
+          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());
-          sliceId_ = null;
+          ruleSet_ = null;
         }
-        return sliceIdBuilder_;
+        return ruleSetBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -33830,89 +49105,114 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.SliceEvent)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule_ACL)
     }
 
-    // @@protoc_insertion_point(class_scope:context.SliceEvent)
-    private static final context.ContextOuterClass.SliceEvent 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.SliceEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule_ACL();
     }
 
-    public static context.ContextOuterClass.SliceEvent getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule_ACL 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<ConfigRule_ACL>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule_ACL>() {
       @java.lang.Override
-      public SliceEvent parsePartialFrom(
+      public ConfigRule_ACL parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new SliceEvent(input, extensionRegistry);
+        return new ConfigRule_ACL(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<SliceEvent> parser() {
+    public static com.google.protobuf.Parser<ConfigRule_ACL> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<SliceEvent> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule_ACL> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.SliceEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule_ACL getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionId)
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
      */
-    boolean hasConnectionUuid();
+    int getActionValue();
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
      */
-    context.ContextOuterClass.Uuid getConnectionUuid();
+    context.ContextOuterClass.ConfigActionEnum getAction();
+
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
-    context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder();
+    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>.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.
+     */
+    context.ContextOuterClass.ConfigRule_ACL getAcl();
+    /**
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     */
+    context.ContextOuterClass.ConfigRule_ACLOrBuilder getAclOrBuilder();
+
+    public context.ContextOuterClass.ConfigRule.ConfigRuleCase getConfigRuleCase();
   }
   /**
-   * <pre>
-   * ----- Connection ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.ConnectionId}
+   * Protobuf type {@code context.ConfigRule}
    */
-  public static final class ConnectionId extends
+  public static final class ConfigRule extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionId)
-      ConnectionIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionId.newBuilder() to construct.
-    private ConnectionId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionId() {
+    private ConfigRule() {
+      action_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionId();
+      return new ConfigRule();
     }
 
     @java.lang.Override
@@ -33920,7 +49220,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionId(
+    private ConfigRule(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -33938,17 +49238,38 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
-              if (connectionUuid_ != null) {
-                subBuilder = connectionUuid_.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();
               }
-              connectionUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              configRule_ =
+                  input.readMessage(context.ContextOuterClass.ConfigRule_Custom.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionUuid_);
-                connectionUuid_ = subBuilder.buildPartial();
+                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;
               break;
             }
             default: {
@@ -33972,41 +49293,137 @@ 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_ConfigRule_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_ConfigRule_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
     }
 
-    public static final int CONNECTION_UUID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid connectionUuid_;
+    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.Uuid connection_uuid = 1;</code>
-     * @return Whether the connectionUuid field is set.
+     * <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 CUSTOM_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return Whether the custom field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionUuid() {
-      return connectionUuid_ != null;
+    public boolean hasCustom() {
+      return configRuleCase_ == 2;
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
-     * @return The connectionUuid.
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
+     * @return The custom.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Uuid getConnectionUuid() {
-      return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+    public context.ContextOuterClass.ConfigRule_Custom getCustom() {
+      if (configRuleCase_ == 2) {
+         return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
     }
     /**
-     * <code>.context.Uuid connection_uuid = 1;</code>
+     * <code>.context.ConfigRule_Custom custom = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-      return getConnectionUuid();
+    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 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;
+    }
+    /**
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     * @return The acl.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule_ACL getAcl() {
+      if (configRuleCase_ == 3) {
+         return (context.ContextOuterClass.ConfigRule_ACL) configRule_;
+      }
+      return context.ContextOuterClass.ConfigRule_ACL.getDefaultInstance();
+    }
+    /**
+     * <code>.context.ConfigRule_ACL acl = 3;</code>
+     */
+    @java.lang.Override
+    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;
@@ -34023,8 +49440,14 @@ 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 (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+        output.writeEnum(1, action_);
+      }
+      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);
     }
@@ -34035,9 +49458,17 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (connectionUuid_ != null) {
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getConnectionUuid());
+          .computeEnumSize(1, action_);
+      }
+      if (configRuleCase_ == 2) {
+        size += com.google.protobuf.CodedOutputStream
+          .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;
@@ -34049,15 +49480,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionId)) {
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionId other = (context.ContextOuterClass.ConnectionId) obj;
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
 
-      if (hasConnectionUuid() != other.hasConnectionUuid()) return false;
-      if (hasConnectionUuid()) {
-        if (!getConnectionUuid()
-            .equals(other.getConnectionUuid())) 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;
@@ -34070,78 +49510,88 @@ 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();
+      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.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId 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.ConnectionId 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.ConnectionId 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.ConnectionId parseFrom(byte[] data)
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionId 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.ConnectionId 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.ConnectionId 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.ConnectionId 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.ConnectionId 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.ConnectionId 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.ConnectionId parseFrom(
+    public static context.ContextOuterClass.ConfigRule parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -34154,7 +49604,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.ConfigRule prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -34170,30 +49620,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Connection ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.ConnectionId}
+     * Protobuf type {@code context.ConfigRule}
      */
     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.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionId_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_ConnectionId_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionId.class, context.ContextOuterClass.ConnectionId.Builder.class);
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionId.newBuilder()
+      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -34211,29 +49657,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
-        } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = 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_ConnectionId_descriptor;
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionId build() {
-        context.ContextOuterClass.ConnectionId result = buildPartial();
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -34241,13 +49685,24 @@ 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_;
-        } else {
-          result.connectionUuid_ = connectionUuidBuilder_.build();
+      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_;
         onBuilt();
         return result;
       }
@@ -34286,18 +49741,31 @@ 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.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)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.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();
@@ -34314,11 +49782,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.ConfigRule parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -34327,124 +49795,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.Uuid connectionUuid_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+          context.ContextOuterClass.ConfigRule_Custom, context.ContextOuterClass.ConfigRule_Custom.Builder, context.ContextOuterClass.ConfigRule_CustomOrBuilder> customBuilder_;
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return Whether the connectionUuid field is set.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return Whether the custom field is set.
        */
-      public boolean hasConnectionUuid() {
-        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      @java.lang.Override
+      public boolean hasCustom() {
+        return configRuleCase_ == 2;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
-       * @return The connectionUuid.
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       * @return The custom.
        */
-      public context.ContextOuterClass.Uuid getConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+      @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 connectionUuidBuilder_.getMessage();
+          if (configRuleCase_ == 2) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
         }
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
-        if (connectionUuidBuilder_ == null) {
+      public Builder setCustom(context.ContextOuterClass.ConfigRule_Custom value) {
+        if (customBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionUuid_ = value;
+          configRule_ = value;
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(value);
+          customBuilder_.setMessage(value);
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
        */
-      public Builder setConnectionUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = builderForValue.build();
+      public Builder setCustom(
+          context.ContextOuterClass.ConfigRule_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          connectionUuidBuilder_.setMessage(builderForValue.build());
+          customBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 2;
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_Custom custom = 2;</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 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 {
-            connectionUuid_ = value;
+            configRule_ = value;
           }
           onChanged();
         } else {
-          connectionUuidBuilder_.mergeFrom(value);
+          if (configRuleCase_ == 2) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
+        }
+        configRuleCase_ = 2;
+        return this;
+      }
+      /**
+       * <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;
+          }
+          customBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       */
+      public context.ContextOuterClass.ConfigRule_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConfigRule_Custom custom = 2;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule_CustomOrBuilder getCustomOrBuilder() {
+        if ((configRuleCase_ == 2) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
+        } else {
+          if (configRuleCase_ == 2) {
+            return (context.ContextOuterClass.ConfigRule_Custom) configRule_;
+          }
+          return context.ContextOuterClass.ConfigRule_Custom.getDefaultInstance();
+        }
+      }
+      /**
+       * <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());
+          configRule_ = null;
         }
+        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.
+       */
+      @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();
+        }
+      }
+      /**
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       */
+      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;
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public Builder clearConnectionUuid() {
-        if (connectionUuidBuilder_ == null) {
-          connectionUuid_ = null;
+      public Builder setAcl(
+          context.ContextOuterClass.ConfigRule_ACL.Builder builderForValue) {
+        if (aclBuilder_ == null) {
+          configRule_ = builderForValue.build();
           onChanged();
         } else {
-          connectionUuid_ = null;
-          connectionUuidBuilder_ = null;
+          aclBuilder_.setMessage(builderForValue.build());
         }
-
+        configRuleCase_ = 3;
         return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
-        
-        onChanged();
-        return getConnectionUuidFieldBuilder().getBuilder();
+      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();
+        } else {
+          if (configRuleCase_ == 3) {
+            aclBuilder_.mergeFrom(value);
+          }
+          aclBuilder_.setMessage(value);
+        }
+        configRuleCase_ = 3;
+        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
        */
-      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
-        if (connectionUuidBuilder_ != null) {
-          return connectionUuidBuilder_.getMessageOrBuilder();
+      public Builder clearAcl() {
+        if (aclBuilder_ == null) {
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+            onChanged();
+          }
         } else {
-          return connectionUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+          if (configRuleCase_ == 3) {
+            configRuleCase_ = 0;
+            configRule_ = null;
+          }
+          aclBuilder_.clear();
         }
+        return this;
       }
       /**
-       * <code>.context.Uuid connection_uuid = 1;</code>
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       */
+      public context.ContextOuterClass.ConfigRule_ACL.Builder getAclBuilder() {
+        return getAclFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ConfigRule_ACL acl = 3;</code>
+       */
+      @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();
+        }
+      }
+      /**
+       * <code>.context.ConfigRule_ACL acl = 3;</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.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());
-          connectionUuid_ = null;
+          configRule_ = null;
         }
-        return connectionUuidBuilder_;
+        configRuleCase_ = 3;
+        onChanged();;
+        return aclBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -34459,150 +50159,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionId)
-    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
     }
 
-    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+    public static context.ContextOuterClass.ConfigRule 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<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
       @java.lang.Override
-      public ConnectionId parsePartialFrom(
+      public ConfigRule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionId(input, extensionRegistry);
+        return new ConfigRule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionId> parser() {
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.Connection)
+  public interface Constraint_CustomOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Custom)
       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>
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
-    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-        getPathHopsEndpointIdsOrBuilderList();
+    java.lang.String getConstraintType();
     /**
-     * <code>repeated .context.EndPointId path_hops_endpoint_ids = 3;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
-    context.ContextOuterClass.EndPointIdOrBuilder getPathHopsEndpointIdsOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
 
     /**
-     * <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>
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
-    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList();
+    java.lang.String getConstraintValue();
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
-    context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index);
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
   }
   /**
-   * Protobuf type {@code context.Connection}
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint_Custom}
    */
-  public static final class Connection extends
+  public static final class Constraint_Custom extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.Connection)
-      ConnectionOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_Custom)
+      Constraint_CustomOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Connection.newBuilder() to construct.
-    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_Custom.newBuilder() to construct.
+    private Constraint_Custom(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Connection() {
-      pathHopsEndpointIds_ = java.util.Collections.emptyList();
-      subServiceIds_ = java.util.Collections.emptyList();
+    private Constraint_Custom() {
+      constraintType_ = "";
+      constraintValue_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Connection();
+      return new Constraint_Custom();
     }
 
     @java.lang.Override
@@ -34610,7 +50260,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Connection(
+    private Constraint_Custom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -34618,7 +50268,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 {
@@ -34630,47 +50279,15 @@ public final class ContextOuterClass {
               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();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              constraintType_ = s;
               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();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
-              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));
+              constraintValue_ = s;
               break;
             }
             default: {
@@ -34688,159 +50305,97 @@ 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;
-    }
-
-    @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);
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
     }
 
-    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_;
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_Custom_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>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
      */
     @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-        getSubServiceIdsOrBuilderList() {
-      return subServiceIds_;
+    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>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
      */
     @java.lang.Override
-    public int getSubServiceIdsCount() {
-      return subServiceIds_.size();
+    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;
+      }
     }
+
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
     /**
-     * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-      return subServiceIds_.get(index);
+    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>repeated .context.ServiceId sub_service_ids = 4;</code>
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-        int index) {
-      return subServiceIds_.get(index);
+    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;
+      }
     }
 
     private byte memoizedIsInitialized = -1;
@@ -34857,17 +50412,11 @@ public final class ContextOuterClass {
     @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));
+      if (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        output.writeMessage(4, subServiceIds_.get(i));
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
       }
       unknownFields.writeTo(output);
     }
@@ -34878,21 +50427,11 @@ 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) {
-        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));
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
       }
-      for (int i = 0; i < subServiceIds_.size(); i++) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, subServiceIds_.get(i));
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -34904,25 +50443,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.Connection)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_Custom)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+      context.ContextOuterClass.Constraint_Custom other = (context.ContextOuterClass.Constraint_Custom) 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 (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -34934,90 +50463,78 @@ 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 (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();
-      }
+      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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection 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.Connection parseFrom(
+    public static context.ContextOuterClass.Constraint_Custom parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -35027,995 +50544,895 @@ public final class ContextOuterClass {
 
     @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();
-        }
-        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();
-        }
-        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_);
-            }
-          }
-        }
-        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);
-        }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Constraint_Custom prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
 
-        return this;
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * <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.Constraint_Custom)
+        context.ContextOuterClass.Constraint_CustomOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
-      /**
-       * <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_;
-        }
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint_Custom.class, context.ContextOuterClass.Constraint_Custom.Builder.class);
       }
-      /**
-       * <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_;
+
+      // Construct using context.ContextOuterClass.Constraint_Custom.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
 
-      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;
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <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();
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
       }
-      /**
-       * <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);
-        }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        constraintType_ = "";
 
-        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());
-        }
+        constraintValue_ = "";
 
         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;
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_Custom_descriptor;
       }
-      /**
-       * <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_;
-        }
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
       }
-      /**
-       * <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;
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Custom build() {
+        context.ContextOuterClass.Constraint_Custom result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
-        return serviceIdBuilder_;
+        return result;
       }
 
-      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;
-         }
+      @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_;
+        onBuilt();
+        return result;
       }
 
-      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();
-        }
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <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);
-        }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <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;
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-      /**
-       * <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;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <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;
+      @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 .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;
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
       }
-      /**
-       * <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();
+      @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);
         } else {
-          pathHopsEndpointIdsBuilder_.addMessage(builderForValue.build());
+          super.mergeFrom(other);
+          return this;
         }
-        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());
+
+      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 {
-          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_);
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
           onChanged();
-        } else {
-          pathHopsEndpointIdsBuilder_.addAllMessages(values);
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         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;
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <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);
+
+      @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);
+          }
         }
         return this;
       }
+
+      private java.lang.Object constraintType_ = "";
       /**
-       * <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>
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
        */
-      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
-           getPathHopsEndpointIdsOrBuilderList() {
-        if (pathHopsEndpointIdsBuilder_ != null) {
-          return pathHopsEndpointIdsBuilder_.getMessageOrBuilderList();
+      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.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 (java.lang.String) ref;
         }
-        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_);
+       * <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 subServiceIdsBuilder_.getMessageList();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
        */
-      public int getSubServiceIdsCount() {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.size();
-        } else {
-          return subServiceIdsBuilder_.getCount();
-        }
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceId getSubServiceIds(int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);
-        } else {
-          return subServiceIdsBuilder_.getMessage(index);
-        }
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
        */
-      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);
-        }
+      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>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
        */
-      public Builder setSubServiceIds(
-          int index, context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.set(index, builderForValue.build());
-          onChanged();
+      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 {
-          subServiceIdsBuilder_.setMessage(index, builderForValue.build());
+          return (java.lang.String) ref;
         }
-        return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
        */
-      public Builder addSubServiceIds(context.ContextOuterClass.ServiceId value) {
-        if (subServiceIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(value);
-          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 {
-          subServiceIdsBuilder_.addMessage(value);
+          return (com.google.protobuf.ByteString) ref;
         }
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @param value The constraintValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintValue(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintValue_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_value = 2;</code>
+       * @return This builder for chaining.
        */
-      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);
-        }
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
        */
-      public Builder addSubServiceIds(
-          context.ContextOuterClass.ServiceId.Builder builderForValue) {
-        if (subServiceIdsBuilder_ == null) {
-          ensureSubServiceIdsIsMutable();
-          subServiceIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          subServiceIdsBuilder_.addMessage(builderForValue.build());
+      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(
+          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.Constraint_Custom)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint_Custom)
+    private static final context.ContextOuterClass.Constraint_Custom DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Custom();
+    }
+
+    public static context.ContextOuterClass.Constraint_Custom getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint_Custom>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Custom>() {
+      @java.lang.Override
+      public Constraint_Custom parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint_Custom(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Constraint_Custom> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint_Custom> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Custom getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface Constraint_ScheduleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_Schedule)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>float start_timestamp = 1;</code>
+     * @return The startTimestamp.
+     */
+    float getStartTimestamp();
+
+    /**
+     * <code>float duration_days = 2;</code>
+     * @return The durationDays.
+     */
+    float getDurationDays();
+  }
+  /**
+   * Protobuf type {@code context.Constraint_Schedule}
+   */
+  public static final class Constraint_Schedule extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Constraint_Schedule)
+      Constraint_ScheduleOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_Schedule.newBuilder() to construct.
+    private Constraint_Schedule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Constraint_Schedule() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Constraint_Schedule();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Constraint_Schedule(
+        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 13: {
+
+              startTimestamp_ = input.readFloat();
+              break;
+            }
+            case 21: {
+
+              durationDays_ = 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 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_Schedule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+    }
+
+    public static final int START_TIMESTAMP_FIELD_NUMBER = 1;
+    private float startTimestamp_;
+    /**
+     * <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>float duration_days = 2;</code>
+     * @return The durationDays.
+     */
+    @java.lang.Override
+    public float getDurationDays() {
+      return durationDays_;
+    }
+
+    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 (startTimestamp_ != 0F) {
+        output.writeFloat(1, startTimestamp_);
+      }
+      if (durationDays_ != 0F) {
+        output.writeFloat(2, durationDays_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (startTimestamp_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, startTimestamp_);
+      }
+      if (durationDays_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, durationDays_);
+      }
+      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.Constraint_Schedule)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Constraint_Schedule other = (context.ContextOuterClass.Constraint_Schedule) obj;
+
+      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;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().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_Schedule parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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_Schedule parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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_Schedule parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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_Schedule parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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_Schedule parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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_Schedule 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(
+        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.Constraint_Schedule 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.Constraint_Schedule}
+     */
+    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 {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        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_Schedule_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint_Schedule.class, context.ContextOuterClass.Constraint_Schedule.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Constraint_Schedule.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();
+        startTimestamp_ = 0F;
+
+        durationDays_ = 0F;
+
         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;
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_Schedule_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Schedule build() {
+        context.ContextOuterClass.Constraint_Schedule result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        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);
       }
-      /**
-       * <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();
+      @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);
         } else {
-          subServiceIdsBuilder_.addAllMessages(values);
+          super.mergeFrom(other);
+          return this;
         }
-        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();
+
+      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.getDurationDays() != 0F) {
+          setDurationDays(other.getDurationDays());
         }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         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);
+
+      @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.Constraint_Schedule parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_Schedule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
         }
         return this;
       }
+
+      private float startTimestamp_ ;
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float start_timestamp = 1;</code>
+       * @return The startTimestamp.
        */
-      public context.ContextOuterClass.ServiceId.Builder getSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().getBuilder(index);
+      @java.lang.Override
+      public float getStartTimestamp() {
+        return startTimestamp_;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float start_timestamp = 1;</code>
+       * @param value The startTimestamp to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceIdOrBuilder getSubServiceIdsOrBuilder(
-          int index) {
-        if (subServiceIdsBuilder_ == null) {
-          return subServiceIds_.get(index);  } else {
-          return subServiceIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public Builder setStartTimestamp(float value) {
+        
+        startTimestamp_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float start_timestamp = 1;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
-           getSubServiceIdsOrBuilderList() {
-        if (subServiceIdsBuilder_ != null) {
-          return subServiceIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(subServiceIds_);
-        }
+      public Builder clearStartTimestamp() {
+        
+        startTimestamp_ = 0F;
+        onChanged();
+        return this;
       }
+
+      private float durationDays_ ;
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float duration_days = 2;</code>
+       * @return The durationDays.
        */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder() {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      @java.lang.Override
+      public float getDurationDays() {
+        return durationDays_;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float duration_days = 2;</code>
+       * @param value The durationDays to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ServiceId.Builder addSubServiceIdsBuilder(
-          int index) {
-        return getSubServiceIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      public Builder setDurationDays(float value) {
+        
+        durationDays_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ServiceId sub_service_ids = 4;</code>
+       * <code>float duration_days = 2;</code>
+       * @return This builder for chaining.
        */
-      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_;
+      public Builder clearDurationDays() {
+        
+        durationDays_ = 0F;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -36030,95 +51447,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.Connection)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_Schedule)
     }
 
-    // @@protoc_insertion_point(class_scope:context.Connection)
-    private static final context.ContextOuterClass.Connection 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.Connection();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_Schedule();
     }
 
-    public static context.ContextOuterClass.Connection getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_Schedule 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<Constraint_Schedule>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_Schedule>() {
       @java.lang.Override
-      public Connection parsePartialFrom(
+      public Constraint_Schedule parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Connection(input, extensionRegistry);
+        return new Constraint_Schedule(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Connection> parser() {
+    public static com.google.protobuf.Parser<Constraint_Schedule> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Connection> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_Schedule> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_Schedule getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionIdListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+  public interface GPS_PositionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.GPS_Position)
       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>
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-        getConnectionIdsOrBuilderList();
+    float getLatitude();
+
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index);
+    float getLongitude();
   }
   /**
-   * Protobuf type {@code context.ConnectionIdList}
+   * Protobuf type {@code context.GPS_Position}
    */
-  public static final class ConnectionIdList extends
+  public static final class GPS_Position extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
-      ConnectionIdListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.GPS_Position)
+      GPS_PositionOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionIdList.newBuilder() to construct.
-    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use GPS_Position.newBuilder() to construct.
+    private GPS_Position(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionIdList() {
-      connectionIds_ = java.util.Collections.emptyList();
+    private GPS_Position() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionIdList();
+      return new GPS_Position();
     }
 
     @java.lang.Override
@@ -36126,7 +51530,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionIdList(
+    private GPS_Position(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36134,7 +51538,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 {
@@ -36145,13 +51548,14 @@ public final class ContextOuterClass {
             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));
+            case 13: {
+
+              latitude_ = input.readFloat();
+              break;
+            }
+            case 21: {
+
+              longitude_ = input.readFloat();
               break;
             }
             default: {
@@ -36169,64 +51573,43 @@ public final class ContextOuterClass {
         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;
+      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_ConnectionIdList_fieldAccessorTable
+      return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+              context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.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_;
-    }
+    public static final int LATITUDE_FIELD_NUMBER = 1;
+    private float latitude_;
     /**
-     * <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>
+     * <code>float latitude = 1;</code>
+     * @return The latitude.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-      return connectionIds_.get(index);
+    public float getLatitude() {
+      return latitude_;
     }
+
+    public static final int LONGITUDE_FIELD_NUMBER = 2;
+    private float longitude_;
     /**
-     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     * <code>float longitude = 2;</code>
+     * @return The longitude.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-        int index) {
-      return connectionIds_.get(index);
+    public float getLongitude() {
+      return longitude_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -36243,8 +51626,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 < connectionIds_.size(); i++) {
-        output.writeMessage(1, connectionIds_.get(i));
+      if (latitude_ != 0F) {
+        output.writeFloat(1, latitude_);
+      }
+      if (longitude_ != 0F) {
+        output.writeFloat(2, longitude_);
       }
       unknownFields.writeTo(output);
     }
@@ -36255,9 +51641,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connectionIds_.size(); i++) {
+      if (latitude_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connectionIds_.get(i));
+          .computeFloatSize(1, latitude_);
+      }
+      if (longitude_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, longitude_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -36269,13 +51659,17 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+      if (!(obj instanceof context.ContextOuterClass.GPS_Position)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+      context.ContextOuterClass.GPS_Position other = (context.ContextOuterClass.GPS_Position) obj;
 
-      if (!getConnectionIdsList()
-          .equals(other.getConnectionIdsList())) return false;
+      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 (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -36287,78 +51681,80 @@ 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();
-      }
+      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());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList 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.ConnectionIdList parseFrom(
+    public static context.ContextOuterClass.GPS_Position parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -36371,7 +51767,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.GPS_Position prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -36387,26 +51783,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionIdList}
+     * 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.ConnectionIdList)
-        context.ContextOuterClass.ConnectionIdListOrBuilder {
+        // @@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_ConnectionIdList_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_ConnectionIdList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_GPS_Position_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+                context.ContextOuterClass.GPS_Position.class, context.ContextOuterClass.GPS_Position.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      // Construct using context.ContextOuterClass.GPS_Position.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -36419,35 +51815,32 @@ public final class ContextOuterClass {
       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();
-        }
+        latitude_ = 0F;
+
+        longitude_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+        return context.ContextOuterClass.internal_static_context_GPS_Position_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
+        return context.ContextOuterClass.GPS_Position.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionIdList build() {
-        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+      public context.ContextOuterClass.GPS_Position build() {
+        context.ContextOuterClass.GPS_Position result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -36455,18 +51848,10 @@ public final class ContextOuterClass {
       }
 
       @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();
-        }
+      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;
       }
@@ -36505,41 +51890,21 @@ 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.GPS_Position) {
+          return mergeFrom((context.ContextOuterClass.GPS_Position)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_);
-            }
-          }
+      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());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -36556,11 +51921,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.GPS_Position parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.GPS_Position) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -36569,246 +51934,67 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
-
-      private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_ =
-        java.util.Collections.emptyList();
-      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.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdsBuilder_;
 
+      private float latitude_ ;
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
-        if (connectionIdsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connectionIds_);
-        } else {
-          return connectionIdsBuilder_.getMessageList();
-        }
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public int getConnectionIdsCount() {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.size();
-        } else {
-          return connectionIdsBuilder_.getCount();
-        }
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);
-        } else {
-          return connectionIdsBuilder_.getMessage(index);
-        }
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.setMessage(index, value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder setConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.set(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionIdsBuilder_.setMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder addConnectionIds(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(value);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(value);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      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>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder addConnectionIds(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(builderForValue.build());
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder addConnectionIds(
-          int index, context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.add(index, builderForValue.build());
-          onChanged();
-        } else {
-          connectionIdsBuilder_.addMessage(index, builderForValue.build());
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      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 {
-          connectionIdsBuilder_.addAllMessages(values);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder clearConnectionIds() {
-        if (connectionIdsBuilder_ == null) {
-          connectionIds_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.clear();
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
-       */
-      public Builder removeConnectionIds(int index) {
-        if (connectionIdsBuilder_ == null) {
-          ensureConnectionIdsIsMutable();
-          connectionIds_.remove(index);
-          onChanged();
-        } else {
-          connectionIdsBuilder_.remove(index);
-        }
-        return this;
-      }
-      /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>float latitude = 1;</code>
+       * @return The latitude.
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().getBuilder(index);
+      @java.lang.Override
+      public float getLatitude() {
+        return latitude_;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>float latitude = 1;</code>
+       * @param value The latitude to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
-          int index) {
-        if (connectionIdsBuilder_ == null) {
-          return connectionIds_.get(index);  } else {
-          return connectionIdsBuilder_.getMessageOrBuilder(index);
-        }
+      public Builder setLatitude(float value) {
+        
+        latitude_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>float latitude = 1;</code>
+       * @return This builder for chaining.
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
-           getConnectionIdsOrBuilderList() {
-        if (connectionIdsBuilder_ != null) {
-          return connectionIdsBuilder_.getMessageOrBuilderList();
-        } else {
-          return java.util.Collections.unmodifiableList(connectionIds_);
-        }
+      public Builder clearLatitude() {
+        
+        latitude_ = 0F;
+        onChanged();
+        return this;
       }
+
+      private float longitude_ ;
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>float longitude = 2;</code>
+       * @return The longitude.
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      @java.lang.Override
+      public float getLongitude() {
+        return longitude_;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>float longitude = 2;</code>
+       * @param value The longitude to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
-          int index) {
-        return getConnectionIdsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      public Builder setLongitude(float value) {
+        
+        longitude_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       * <code>float longitude = 2;</code>
+       * @return This builder for chaining.
        */
-      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());
-          connectionIds_ = null;
-        }
-        return connectionIdsBuilder_;
+      public Builder clearLongitude() {
+        
+        longitude_ = 0F;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -36823,95 +52009,104 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionIdList)
+      // @@protoc_insertion_point(builder_scope:context.GPS_Position)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-    private static final context.ContextOuterClass.ConnectionIdList 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.ConnectionIdList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.GPS_Position();
     }
 
-    public static context.ContextOuterClass.ConnectionIdList getDefaultInstance() {
+    public static context.ContextOuterClass.GPS_Position 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<GPS_Position>
+        PARSER = new com.google.protobuf.AbstractParser<GPS_Position>() {
       @java.lang.Override
-      public ConnectionIdList parsePartialFrom(
+      public GPS_Position parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionIdList(input, extensionRegistry);
+        return new GPS_Position(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionIdList> parser() {
+    public static com.google.protobuf.Parser<GPS_Position> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionIdList> getParserForType() {
+    public com.google.protobuf.Parser<GPS_Position> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+    public context.ContextOuterClass.GPS_Position getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionList)
+  public interface LocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Location)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    java.util.List<context.ContextOuterClass.Connection> 
-        getConnectionsList();
+    boolean hasRegion();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The region.
      */
-    context.ContextOuterClass.Connection getConnections(int index);
+    java.lang.String getRegion();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The bytes for region.
      */
-    int getConnectionsCount();
+    com.google.protobuf.ByteString
+        getRegionBytes();
+
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return Whether the gpsPosition field is set.
      */
-    java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList();
+    boolean hasGpsPosition();
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
-    context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index);
+    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.ConnectionList}
+   * Protobuf type {@code context.Location}
    */
-  public static final class ConnectionList extends
+  public static final class Location extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionList)
-      ConnectionListOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Location)
+      LocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionList.newBuilder() to construct.
-    private ConnectionList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Location.newBuilder() to construct.
+    private Location(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionList() {
-      connections_ = java.util.Collections.emptyList();
+    private Location() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionList();
+      return new Location();
     }
 
     @java.lang.Override
@@ -36919,7 +52114,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionList(
+    private Location(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -36927,7 +52122,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 {
@@ -36939,12 +52133,23 @@ 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;
+              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();
               }
-              connections_.add(
-                  input.readMessage(context.ContextOuterClass.Connection.parser(), extensionRegistry));
+              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: {
@@ -36962,64 +52167,145 @@ 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_Location_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_Location_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+              context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
     }
 
-    public static final int CONNECTIONS_FIELD_NUMBER = 1;
-    private java.util.List<context.ContextOuterClass.Connection> connections_;
+    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_);
+    }
+
+    public static final int REGION_FIELD_NUMBER = 1;
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string region = 1;</code>
+     * @return Whether the region field is set.
      */
-    @java.lang.Override
-    public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-      return connections_;
+    public boolean hasRegion() {
+      return locationCase_ == 1;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>string region = 1;</code>
+     * @return The region.
      */
-    @java.lang.Override
-    public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-        getConnectionsOrBuilderList() {
-      return connections_;
+    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;
+      }
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <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
-    public int getConnectionsCount() {
-      return connections_.size();
+    public boolean hasGpsPosition() {
+      return locationCase_ == 2;
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
+     * @return The gpsPosition.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Connection getConnections(int index) {
-      return connections_.get(index);
+    public context.ContextOuterClass.GPS_Position getGpsPosition() {
+      if (locationCase_ == 2) {
+         return (context.ContextOuterClass.GPS_Position) location_;
+      }
+      return context.ContextOuterClass.GPS_Position.getDefaultInstance();
     }
     /**
-     * <code>repeated .context.Connection connections = 1;</code>
+     * <code>.context.GPS_Position gps_position = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-        int index) {
-      return connections_.get(index);
+    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;
@@ -37036,8 +52322,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 (locationCase_ == 1) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, location_);
+      }
+      if (locationCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       unknownFields.writeTo(output);
     }
@@ -37048,9 +52337,12 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      for (int i = 0; i < connections_.size(); i++) {
+      if (locationCase_ == 1) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, location_);
+      }
+      if (locationCase_ == 2) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, connections_.get(i));
+          .computeMessageSize(2, (context.ContextOuterClass.GPS_Position) location_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37062,13 +52354,24 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionList)) {
+      if (!(obj instanceof context.ContextOuterClass.Location)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionList other = (context.ContextOuterClass.ConnectionList) obj;
-
-      if (!getConnectionsList()
-          .equals(other.getConnectionsList())) return false;
+      context.ContextOuterClass.Location other = (context.ContextOuterClass.Location) 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 (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -37080,78 +52383,86 @@ 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();
+      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.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList 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.ConnectionList 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.ConnectionList 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.ConnectionList parseFrom(byte[] data)
+    public static context.ContextOuterClass.Location parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConnectionList 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.ConnectionList 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.ConnectionList 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.ConnectionList 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.ConnectionList 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.ConnectionList 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.ConnectionList parseFrom(
+    public static context.ContextOuterClass.Location parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -37164,7 +52475,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.Location prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -37180,26 +52491,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionList}
+     * Protobuf type {@code context.Location}
      */
     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.Location)
+        context.ContextOuterClass.LocationOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_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_ConnectionList_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Location_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionList.class, context.ContextOuterClass.ConnectionList.Builder.class);
+                context.ContextOuterClass.Location.class, context.ContextOuterClass.Location.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      // Construct using context.ContextOuterClass.Location.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -37212,35 +52523,30 @@ 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);
-        } else {
-          connectionsBuilder_.clear();
-        }
+        locationCase_ = 0;
+        location_ = null;
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+        return context.ContextOuterClass.internal_static_context_Location_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      public context.ContextOuterClass.Location getDefaultInstanceForType() {
+        return context.ContextOuterClass.Location.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionList build() {
-        context.ContextOuterClass.ConnectionList result = buildPartial();
+      public context.ContextOuterClass.Location build() {
+        context.ContextOuterClass.Location result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -37248,18 +52554,19 @@ 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);
+      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.connections_ = connections_;
-        } else {
-          result.connections_ = connectionsBuilder_.build();
         }
+        result.locationCase_ = locationCase_;
         onBuilt();
         return result;
       }
@@ -37298,40 +52605,29 @@ 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.Location) {
+          return mergeFrom((context.ContextOuterClass.Location)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_);
-            }
+      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;
           }
-        } 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_);
-            }
+          case GPS_POSITION: {
+            mergeGpsPosition(other.getGpsPosition());
+            break;
+          }
+          case LOCATION_NOT_SET: {
+            break;
           }
         }
         this.mergeUnknownFields(other.unknownFields);
@@ -37349,11 +52645,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.Location parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionList) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Location) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -37362,246 +52658,258 @@ public final class ContextOuterClass {
         }
         return this;
       }
-      private int bitField0_;
+      private int locationCase_ = 0;
+      private java.lang.Object location_;
+      public LocationCase
+          getLocationCase() {
+        return LocationCase.forNumber(
+            locationCase_);
+      }
 
-      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;
-         }
+      public Builder clearLocation() {
+        locationCase_ = 0;
+        location_ = null;
+        onChanged();
+        return this;
       }
 
-      private com.google.protobuf.RepeatedFieldBuilderV3<
-          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
 
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string region = 1;</code>
+       * @return Whether the region field is set.
        */
-      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
-        if (connectionsBuilder_ == null) {
-          return java.util.Collections.unmodifiableList(connections_);
-        } else {
-          return connectionsBuilder_.getMessageList();
-        }
+      @java.lang.Override
+      public boolean hasRegion() {
+        return locationCase_ == 1;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string region = 1;</code>
+       * @return The region.
        */
-      public int getConnectionsCount() {
-        if (connectionsBuilder_ == null) {
-          return connections_.size();
+      @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 connectionsBuilder_.getCount();
+          return (java.lang.String) ref;
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string region = 1;</code>
+       * @return The bytes for region.
        */
-      public context.ContextOuterClass.Connection getConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);
+      @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 connectionsBuilder_.getMessage(index);
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string region = 1;</code>
+       * @param value The region to set.
+       * @return This builder for chaining.
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.set(index, value);
-          onChanged();
-        } else {
-          connectionsBuilder_.setMessage(index, value);
-        }
+      public Builder setRegion(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  locationCase_ = 1;
+        location_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string region = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.set(index, builderForValue.build());
+      public Builder clearRegion() {
+        if (locationCase_ == 1) {
+          locationCase_ = 0;
+          location_ = null;
           onChanged();
-        } else {
-          connectionsBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>string region = 1;</code>
+       * @param value The bytes for region to set.
+       * @return This builder for chaining.
        */
-      public Builder addConnections(context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(value);
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(value);
-        }
+      public Builder setRegionBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        locationCase_ = 1;
+        location_ = value;
+        onChanged();
         return this;
       }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.GPS_Position, context.ContextOuterClass.GPS_Position.Builder, context.ContextOuterClass.GPS_PositionOrBuilder> gpsPositionBuilder_;
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return Whether the gpsPosition field is set.
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection value) {
-        if (connectionsBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          ensureConnectionsIsMutable();
-          connections_.add(index, value);
-          onChanged();
-        } else {
-          connectionsBuilder_.addMessage(index, value);
-        }
-        return this;
+      @java.lang.Override
+      public boolean hasGpsPosition() {
+        return locationCase_ == 2;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
+       * @return The gpsPosition.
        */
-      public Builder addConnections(
-          context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(builderForValue.build());
-          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 {
-          connectionsBuilder_.addMessage(builderForValue.build());
+          if (locationCase_ == 2) {
+            return gpsPositionBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         }
-        return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder addConnections(
-          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.add(index, builderForValue.build());
+      public Builder setGpsPosition(context.ContextOuterClass.GPS_Position value) {
+        if (gpsPositionBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          location_ = value;
           onChanged();
         } else {
-          connectionsBuilder_.addMessage(index, builderForValue.build());
+          gpsPositionBuilder_.setMessage(value);
         }
+        locationCase_ = 2;
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder addAllConnections(
-          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, connections_);
+      public Builder setGpsPosition(
+          context.ContextOuterClass.GPS_Position.Builder builderForValue) {
+        if (gpsPositionBuilder_ == null) {
+          location_ = builderForValue.build();
           onChanged();
         } else {
-          connectionsBuilder_.addAllMessages(values);
+          gpsPositionBuilder_.setMessage(builderForValue.build());
         }
+        locationCase_ = 2;
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder clearConnections() {
-        if (connectionsBuilder_ == null) {
-          connections_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000001);
+      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 {
-          connectionsBuilder_.clear();
+          if (locationCase_ == 2) {
+            gpsPositionBuilder_.mergeFrom(value);
+          }
+          gpsPositionBuilder_.setMessage(value);
         }
+        locationCase_ = 2;
         return this;
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public Builder removeConnections(int index) {
-        if (connectionsBuilder_ == null) {
-          ensureConnectionsIsMutable();
-          connections_.remove(index);
-          onChanged();
+      public Builder clearGpsPosition() {
+        if (gpsPositionBuilder_ == null) {
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+            onChanged();
+          }
         } else {
-          connectionsBuilder_.remove(index);
+          if (locationCase_ == 2) {
+            locationCase_ = 0;
+            location_ = null;
+          }
+          gpsPositionBuilder_.clear();
         }
         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.GPS_Position gps_position = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
-          int index) {
-        if (connectionsBuilder_ == null) {
-          return connections_.get(index);  } else {
-          return connectionsBuilder_.getMessageOrBuilder(index);
-        }
+      public context.ContextOuterClass.GPS_Position.Builder getGpsPositionBuilder() {
+        return getGpsPositionFieldBuilder().getBuilder();
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 2;</code>
        */
-      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
-           getConnectionsOrBuilderList() {
-        if (connectionsBuilder_ != null) {
-          return connectionsBuilder_.getMessageOrBuilderList();
+      @java.lang.Override
+      public context.ContextOuterClass.GPS_PositionOrBuilder getGpsPositionOrBuilder() {
+        if ((locationCase_ == 2) && (gpsPositionBuilder_ != null)) {
+          return gpsPositionBuilder_.getMessageOrBuilder();
         } else {
-          return java.util.Collections.unmodifiableList(connections_);
+          if (locationCase_ == 2) {
+            return (context.ContextOuterClass.GPS_Position) location_;
+          }
+          return context.ContextOuterClass.GPS_Position.getDefaultInstance();
         }
       }
       /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder() {
-        return getConnectionsFieldBuilder().addBuilder(
-            context.ContextOuterClass.Connection.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
-       */
-      public context.ContextOuterClass.Connection.Builder addConnectionsBuilder(
-          int index) {
-        return getConnectionsFieldBuilder().addBuilder(
-            index, context.ContextOuterClass.Connection.getDefaultInstance());
-      }
-      /**
-       * <code>repeated .context.Connection connections = 1;</code>
+       * <code>.context.GPS_Position gps_position = 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.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());
-          connections_ = null;
+          location_ = null;
         }
-        return connectionsBuilder_;
+        locationCase_ = 2;
+        onChanged();;
+        return gpsPositionBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -37616,100 +52924,100 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionList)
+      // @@protoc_insertion_point(builder_scope:context.Location)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionList)
-    private static final context.ContextOuterClass.ConnectionList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Location)
+    private static final context.ContextOuterClass.Location DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionList();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Location();
     }
 
-    public static context.ContextOuterClass.ConnectionList getDefaultInstance() {
+    public static context.ContextOuterClass.Location 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<Location>
+        PARSER = new com.google.protobuf.AbstractParser<Location>() {
       @java.lang.Override
-      public ConnectionList parsePartialFrom(
+      public Location parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionList(input, extensionRegistry);
+        return new Location(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionList> parser() {
+    public static com.google.protobuf.Parser<Location> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionList> getParserForType() {
+    public com.google.protobuf.Parser<Location> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+    public context.ContextOuterClass.Location getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConnectionEventOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConnectionEvent)
+  public interface Constraint_EndPointLocationOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_EndPointLocation)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
-    boolean hasEvent();
+    boolean hasEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
-    context.ContextOuterClass.Event getEvent();
+    context.ContextOuterClass.EndPointId getEndpointId();
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
-    context.ContextOuterClass.EventOrBuilder getEventOrBuilder();
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
-    boolean hasConnectionId();
+    boolean hasLocation();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
-    context.ContextOuterClass.ConnectionId getConnectionId();
+    context.ContextOuterClass.Location getLocation();
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
-    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+    context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder();
   }
   /**
-   * Protobuf type {@code context.ConnectionEvent}
+   * Protobuf type {@code context.Constraint_EndPointLocation}
    */
-  public static final class ConnectionEvent extends
+  public static final class Constraint_EndPointLocation extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConnectionEvent)
-      ConnectionEventOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_EndPointLocation)
+      Constraint_EndPointLocationOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConnectionEvent.newBuilder() to construct.
-    private ConnectionEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_EndPointLocation.newBuilder() to construct.
+    private Constraint_EndPointLocation(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConnectionEvent() {
+    private Constraint_EndPointLocation() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConnectionEvent();
+      return new Constraint_EndPointLocation();
     }
 
     @java.lang.Override
@@ -37717,7 +53025,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConnectionEvent(
+    private Constraint_EndPointLocation(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -37736,27 +53044,27 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Event.Builder subBuilder = null;
-              if (event_ != null) {
-                subBuilder = event_.toBuilder();
+              context.ContextOuterClass.EndPointId.Builder subBuilder = null;
+              if (endpointId_ != null) {
+                subBuilder = endpointId_.toBuilder();
               }
-              event_ = input.readMessage(context.ContextOuterClass.Event.parser(), extensionRegistry);
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(event_);
-                event_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = subBuilder.buildPartial();
               }
 
               break;
             }
             case 18: {
-              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
-              if (connectionId_ != null) {
-                subBuilder = connectionId_.toBuilder();
+              context.ContextOuterClass.Location.Builder subBuilder = null;
+              if (location_ != null) {
+                subBuilder = location_.toBuilder();
               }
-              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              location_ = input.readMessage(context.ContextOuterClass.Location.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(connectionId_);
-                connectionId_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(location_);
+                location_ = subBuilder.buildPartial();
               }
 
               break;
@@ -37782,67 +53090,67 @@ 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_Constraint_EndPointLocation_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_Constraint_EndPointLocation_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+              context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
     }
 
-    public static final int EVENT_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Event event_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return Whether the event field is set.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public boolean hasEvent() {
-      return event_ != null;
+    public boolean hasEndpointId() {
+      return endpointId_ != null;
     }
     /**
-     * <code>.context.Event event = 1;</code>
-     * @return The event.
+     * <code>.context.EndPointId endpoint_id = 1;</code>
+     * @return The endpointId.
      */
     @java.lang.Override
-    public context.ContextOuterClass.Event getEvent() {
-      return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+    public context.ContextOuterClass.EndPointId getEndpointId() {
+      return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
     }
     /**
-     * <code>.context.Event event = 1;</code>
+     * <code>.context.EndPointId endpoint_id = 1;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-      return getEvent();
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
     }
 
-    public static final int CONNECTION_ID_FIELD_NUMBER = 2;
-    private context.ContextOuterClass.ConnectionId connectionId_;
+    public static final int LOCATION_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Location location_;
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return Whether the connectionId field is set.
+     * <code>.context.Location location = 2;</code>
+     * @return Whether the location field is set.
      */
     @java.lang.Override
-    public boolean hasConnectionId() {
-      return connectionId_ != null;
+    public boolean hasLocation() {
+      return location_ != null;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
-     * @return The connectionId.
+     * <code>.context.Location location = 2;</code>
+     * @return The location.
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionId getConnectionId() {
-      return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+    public context.ContextOuterClass.Location getLocation() {
+      return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
     }
     /**
-     * <code>.context.ConnectionId connection_id = 2;</code>
+     * <code>.context.Location location = 2;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-      return getConnectionId();
+    public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+      return getLocation();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -37859,11 +53167,11 @@ 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 (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
       }
-      if (connectionId_ != null) {
-        output.writeMessage(2, getConnectionId());
+      if (location_ != null) {
+        output.writeMessage(2, getLocation());
       }
       unknownFields.writeTo(output);
     }
@@ -37874,13 +53182,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (event_ != null) {
+      if (endpointId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEvent());
+          .computeMessageSize(1, getEndpointId());
       }
-      if (connectionId_ != null) {
+      if (location_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getConnectionId());
+          .computeMessageSize(2, getLocation());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -37892,20 +53200,20 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConnectionEvent)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_EndPointLocation)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConnectionEvent other = (context.ContextOuterClass.ConnectionEvent) obj;
+      context.ContextOuterClass.Constraint_EndPointLocation other = (context.ContextOuterClass.Constraint_EndPointLocation) obj;
 
-      if (hasEvent() != other.hasEvent()) return false;
-      if (hasEvent()) {
-        if (!getEvent()
-            .equals(other.getEvent())) return false;
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
       }
-      if (hasConnectionId() != other.hasConnectionId()) return false;
-      if (hasConnectionId()) {
-        if (!getConnectionId()
-            .equals(other.getConnectionId())) 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;
@@ -37918,82 +53226,82 @@ 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 (hasEndpointId()) {
+        hash = (37 * hash) + ENDPOINT_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getEndpointId().hashCode();
       }
-      if (hasConnectionId()) {
-        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
-        hash = (53 * hash) + getConnectionId().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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent 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.ConnectionEvent parseFrom(
+    public static context.ContextOuterClass.Constraint_EndPointLocation parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38006,7 +53314,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.Constraint_EndPointLocation prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38022,26 +53330,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConnectionEvent}
+     * 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.ConnectionEvent)
-        context.ContextOuterClass.ConnectionEventOrBuilder {
+        // @@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_ConnectionEvent_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_ConnectionEvent_fieldAccessorTable
+        return context.ContextOuterClass.internal_static_context_Constraint_EndPointLocation_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConnectionEvent.class, context.ContextOuterClass.ConnectionEvent.Builder.class);
+                context.ContextOuterClass.Constraint_EndPointLocation.class, context.ContextOuterClass.Constraint_EndPointLocation.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConnectionEvent.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_EndPointLocation.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38059,17 +53367,17 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (eventBuilder_ == null) {
-          event_ = null;
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+        if (locationBuilder_ == null) {
+          location_ = null;
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          location_ = null;
+          locationBuilder_ = null;
         }
         return this;
       }
@@ -38077,17 +53385,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_Constraint_EndPointLocation_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConnectionEvent.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConnectionEvent build() {
-        context.ContextOuterClass.ConnectionEvent result = buildPartial();
+      public context.ContextOuterClass.Constraint_EndPointLocation build() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -38095,17 +53403,17 @@ 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.Constraint_EndPointLocation buildPartial() {
+        context.ContextOuterClass.Constraint_EndPointLocation result = new context.ContextOuterClass.Constraint_EndPointLocation(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
         } else {
-          result.event_ = eventBuilder_.build();
+          result.endpointId_ = endpointIdBuilder_.build();
         }
-        if (connectionIdBuilder_ == null) {
-          result.connectionId_ = connectionId_;
+        if (locationBuilder_ == null) {
+          result.location_ = location_;
         } else {
-          result.connectionId_ = connectionIdBuilder_.build();
+          result.location_ = locationBuilder_.build();
         }
         onBuilt();
         return result;
@@ -38145,21 +53453,21 @@ 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.Constraint_EndPointLocation) {
+          return mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation)other);
         } else {
           super.mergeFrom(other);
           return this;
         }
       }
 
-      public Builder mergeFrom(context.ContextOuterClass.ConnectionEvent other) {
-        if (other == context.ContextOuterClass.ConnectionEvent.getDefaultInstance()) return this;
-        if (other.hasEvent()) {
-          mergeEvent(other.getEvent());
+      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.hasConnectionId()) {
-          mergeConnectionId(other.getConnectionId());
+        if (other.hasLocation()) {
+          mergeLocation(other.getLocation());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -38176,11 +53484,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConnectionEvent parsedMessage = null;
+        context.ContextOuterClass.Constraint_EndPointLocation parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConnectionEvent) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_EndPointLocation) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -38190,242 +53498,242 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.Event event_;
+      private context.ContextOuterClass.EndPointId endpointId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Event, context.ContextOuterClass.Event.Builder, context.ContextOuterClass.EventOrBuilder> eventBuilder_;
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> endpointIdBuilder_;
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return Whether the event field is set.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return Whether the endpointId field is set.
        */
-      public boolean hasEvent() {
-        return eventBuilder_ != null || event_ != null;
+      public boolean hasEndpointId() {
+        return endpointIdBuilder_ != null || endpointId_ != null;
       }
       /**
-       * <code>.context.Event event = 1;</code>
-       * @return The event.
+       * <code>.context.EndPointId endpoint_id = 1;</code>
+       * @return The endpointId.
        */
-      public context.ContextOuterClass.Event getEvent() {
-        if (eventBuilder_ == null) {
-          return event_ == null ? context.ContextOuterClass.Event.getDefaultInstance() : event_;
+      public context.ContextOuterClass.EndPointId getEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          return endpointId_ == null ? context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         } else {
-          return eventBuilder_.getMessage();
+          return endpointIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(context.ContextOuterClass.Event value) {
-        if (eventBuilder_ == null) {
+      public Builder setEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          event_ = value;
+          endpointId_ = value;
           onChanged();
         } else {
-          eventBuilder_.setMessage(value);
+          endpointIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder setEvent(
-          context.ContextOuterClass.Event.Builder builderForValue) {
-        if (eventBuilder_ == null) {
-          event_ = builderForValue.build();
+      public Builder setEndpointId(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = builderForValue.build();
           onChanged();
         } else {
-          eventBuilder_.setMessage(builderForValue.build());
+          endpointIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</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 mergeEndpointId(context.ContextOuterClass.EndPointId value) {
+        if (endpointIdBuilder_ == null) {
+          if (endpointId_ != null) {
+            endpointId_ =
+              context.ContextOuterClass.EndPointId.newBuilder(endpointId_).mergeFrom(value).buildPartial();
           } else {
-            event_ = value;
+            endpointId_ = value;
           }
           onChanged();
         } else {
-          eventBuilder_.mergeFrom(value);
+          endpointIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public Builder clearEvent() {
-        if (eventBuilder_ == null) {
-          event_ = null;
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
           onChanged();
         } else {
-          event_ = null;
-          eventBuilder_ = null;
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.Event.Builder getEventBuilder() {
+      public context.ContextOuterClass.EndPointId.Builder getEndpointIdBuilder() {
         
         onChanged();
-        return getEventFieldBuilder().getBuilder();
+        return getEndpointIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 1;</code>
        */
-      public context.ContextOuterClass.EventOrBuilder getEventOrBuilder() {
-        if (eventBuilder_ != null) {
-          return eventBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+        if (endpointIdBuilder_ != null) {
+          return endpointIdBuilder_.getMessageOrBuilder();
         } else {
-          return event_ == null ?
-              context.ContextOuterClass.Event.getDefaultInstance() : event_;
+          return endpointId_ == null ?
+              context.ContextOuterClass.EndPointId.getDefaultInstance() : endpointId_;
         }
       }
       /**
-       * <code>.context.Event event = 1;</code>
+       * <code>.context.EndPointId endpoint_id = 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(),
+          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());
-          event_ = null;
+          endpointId_ = null;
         }
-        return eventBuilder_;
+        return endpointIdBuilder_;
       }
 
-      private context.ContextOuterClass.ConnectionId connectionId_;
+      private context.ContextOuterClass.Location location_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> connectionIdBuilder_;
+          context.ContextOuterClass.Location, context.ContextOuterClass.Location.Builder, context.ContextOuterClass.LocationOrBuilder> locationBuilder_;
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return Whether the connectionId field is set.
+       * <code>.context.Location location = 2;</code>
+       * @return Whether the location field is set.
        */
-      public boolean hasConnectionId() {
-        return connectionIdBuilder_ != null || connectionId_ != null;
+      public boolean hasLocation() {
+        return locationBuilder_ != null || location_ != null;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
-       * @return The connectionId.
+       * <code>.context.Location location = 2;</code>
+       * @return The location.
        */
-      public context.ContextOuterClass.ConnectionId getConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          return connectionId_ == null ? context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+      public context.ContextOuterClass.Location getLocation() {
+        if (locationBuilder_ == null) {
+          return location_ == null ? context.ContextOuterClass.Location.getDefaultInstance() : location_;
         } else {
-          return connectionIdBuilder_.getMessage();
+          return locationBuilder_.getMessage();
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setConnectionId(context.ContextOuterClass.ConnectionId value) {
-        if (connectionIdBuilder_ == null) {
+      public Builder setLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          connectionId_ = value;
+          location_ = value;
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(value);
+          locationBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder setConnectionId(
-          context.ContextOuterClass.ConnectionId.Builder builderForValue) {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = builderForValue.build();
+      public Builder setLocation(
+          context.ContextOuterClass.Location.Builder builderForValue) {
+        if (locationBuilder_ == null) {
+          location_ = builderForValue.build();
           onChanged();
         } else {
-          connectionIdBuilder_.setMessage(builderForValue.build());
+          locationBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</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 mergeLocation(context.ContextOuterClass.Location value) {
+        if (locationBuilder_ == null) {
+          if (location_ != null) {
+            location_ =
+              context.ContextOuterClass.Location.newBuilder(location_).mergeFrom(value).buildPartial();
           } else {
-            connectionId_ = value;
+            location_ = value;
           }
           onChanged();
         } else {
-          connectionIdBuilder_.mergeFrom(value);
+          locationBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public Builder clearConnectionId() {
-        if (connectionIdBuilder_ == null) {
-          connectionId_ = null;
+      public Builder clearLocation() {
+        if (locationBuilder_ == null) {
+          location_ = null;
           onChanged();
         } else {
-          connectionId_ = null;
-          connectionIdBuilder_ = null;
+          location_ = null;
+          locationBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionId.Builder getConnectionIdBuilder() {
+      public context.ContextOuterClass.Location.Builder getLocationBuilder() {
         
         onChanged();
-        return getConnectionIdFieldBuilder().getBuilder();
+        return getLocationFieldBuilder().getBuilder();
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</code>
        */
-      public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder() {
-        if (connectionIdBuilder_ != null) {
-          return connectionIdBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.LocationOrBuilder getLocationOrBuilder() {
+        if (locationBuilder_ != null) {
+          return locationBuilder_.getMessageOrBuilder();
         } else {
-          return connectionId_ == null ?
-              context.ContextOuterClass.ConnectionId.getDefaultInstance() : connectionId_;
+          return location_ == null ?
+              context.ContextOuterClass.Location.getDefaultInstance() : location_;
         }
       }
       /**
-       * <code>.context.ConnectionId connection_id = 2;</code>
+       * <code>.context.Location location = 2;</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.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());
-          connectionId_ = null;
+          location_ = null;
         }
-        return connectionIdBuilder_;
+        return locationBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -38440,119 +53748,76 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConnectionEvent)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_EndPointLocation)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-    private static final context.ContextOuterClass.ConnectionEvent 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.ConnectionEvent();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_EndPointLocation();
     }
 
-    public static context.ContextOuterClass.ConnectionEvent getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_EndPointLocation 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<Constraint_EndPointLocation>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_EndPointLocation>() {
       @java.lang.Override
-      public ConnectionEvent parsePartialFrom(
+      public Constraint_EndPointLocation parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConnectionEvent(input, extensionRegistry);
+        return new Constraint_EndPointLocation(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConnectionEvent> parser() {
+    public static com.google.protobuf.Parser<Constraint_EndPointLocation> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConnectionEvent> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_EndPointLocation> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConnectionEvent getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_EndPointLocation getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+  public interface Constraint_SLA_LatencyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Latency)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return Whether the topologyId field is set.
-     */
-    boolean hasTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    context.ContextOuterClass.TopologyId getTopologyId();
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder();
-
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return Whether the deviceId field is set.
-     */
-    boolean hasDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     * @return The deviceId.
-     */
-    context.ContextOuterClass.DeviceId getDeviceId();
-    /**
-     * <code>.context.DeviceId device_id = 2;</code>
-     */
-    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>
+     * <code>float e2e_latency_ms = 1;</code>
+     * @return The e2eLatencyMs.
      */
-    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+    float getE2ELatencyMs();
   }
   /**
-   * <pre>
-   * ----- Endpoint ------------------------------------------------------------------------------------------------------
-   * </pre>
-   *
-   * Protobuf type {@code context.EndPointId}
+   * Protobuf type {@code context.Constraint_SLA_Latency}
    */
-  public static final class EndPointId extends
+  public static final class Constraint_SLA_Latency extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPointId)
-      EndPointIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Latency)
+      Constraint_SLA_LatencyOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPointId.newBuilder() to construct.
-    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Latency.newBuilder() to construct.
+    private Constraint_SLA_Latency(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPointId() {
+    private Constraint_SLA_Latency() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPointId();
+      return new Constraint_SLA_Latency();
     }
 
     @java.lang.Override
@@ -38560,7 +53825,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPointId(
+    private Constraint_SLA_Latency(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -38578,43 +53843,9 @@ public final class ContextOuterClass {
             case 0:
               done = true;
               break;
-            case 10: {
-              context.ContextOuterClass.TopologyId.Builder subBuilder = null;
-              if (topologyId_ != null) {
-                subBuilder = topologyId_.toBuilder();
-              }
-              topologyId_ = input.readMessage(context.ContextOuterClass.TopologyId.parser(), extensionRegistry);
-              if (subBuilder != null) {
-                subBuilder.mergeFrom(topologyId_);
-                topologyId_ = 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();
-              }
-
-              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();
-              }
+            case 13: {
 
+              e2ELatencyMs_ = input.readFloat();
               break;
             }
             default: {
@@ -38632,99 +53863,32 @@ public final class ContextOuterClass {
         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_EndPointId_descriptor;
-    }
-
-    @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 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.
-     */
-    @java.lang.Override
-    public boolean hasTopologyId() {
-      return topologyId_ != null;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     * @return The topologyId.
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyId getTopologyId() {
-      return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-    }
-    /**
-     * <code>.context.TopologyId topology_id = 1;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.TopologyIdOrBuilder getTopologyIdOrBuilder() {
-      return getTopologyId();
-    }
-
-    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.
-     */
-    @java.lang.Override
-    public boolean hasDeviceId() {
-      return deviceId_ != null;
-    }
-    /**
-     * <code>.context.DeviceId device_id = 2;</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 = 2;</code>
-     */
-    @java.lang.Override
-    public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-      return getDeviceId();
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
     }
-
-    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;
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_descriptor;
     }
-    /**
-     * <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_;
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint_SLA_Latency.class, context.ContextOuterClass.Constraint_SLA_Latency.Builder.class);
     }
+
+    public static final int E2E_LATENCY_MS_FIELD_NUMBER = 1;
+    private float e2ELatencyMs_;
     /**
-     * <code>.context.Uuid endpoint_uuid = 3;</code>
+     * <code>float e2e_latency_ms = 1;</code>
+     * @return The e2eLatencyMs.
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-      return getEndpointUuid();
+    public float getE2ELatencyMs() {
+      return e2ELatencyMs_;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -38741,14 +53905,8 @@ 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());
-      }
-      if (deviceId_ != null) {
-        output.writeMessage(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
-        output.writeMessage(3, getEndpointUuid());
+      if (e2ELatencyMs_ != 0F) {
+        output.writeFloat(1, e2ELatencyMs_);
       }
       unknownFields.writeTo(output);
     }
@@ -38759,17 +53917,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (topologyId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getTopologyId());
-      }
-      if (deviceId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(2, getDeviceId());
-      }
-      if (endpointUuid_ != null) {
+      if (e2ELatencyMs_ != 0F) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(3, getEndpointUuid());
+          .computeFloatSize(1, e2ELatencyMs_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -38781,26 +53931,14 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Latency)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+      context.ContextOuterClass.Constraint_SLA_Latency other = (context.ContextOuterClass.Constraint_SLA_Latency) 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 (hasEndpointUuid() != other.hasEndpointUuid()) return false;
-      if (hasEndpointUuid()) {
-        if (!getEndpointUuid()
-            .equals(other.getEndpointUuid())) return false;
-      }
+      if (java.lang.Float.floatToIntBits(getE2ELatencyMs())
+          != java.lang.Float.floatToIntBits(
+              other.getE2ELatencyMs())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -38812,86 +53950,77 @@ 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 (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 = (37 * hash) + E2E_LATENCY_MS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getE2ELatencyMs());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPointId parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency 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.Constraint_SLA_Latency parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -38904,7 +54033,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.Constraint_SLA_Latency prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -38920,30 +54049,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Endpoint ------------------------------------------------------------------------------------------------------
-     * </pre>
-     *
-     * Protobuf type {@code context.EndPointId}
+     * Protobuf type {@code context.Constraint_SLA_Latency}
      */
     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.Constraint_SLA_Latency)
+        context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_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_Constraint_SLA_Latency_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPointId.class, context.ContextOuterClass.EndPointId.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Latency.class, context.ContextOuterClass.Constraint_SLA_Latency.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPointId.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Latency.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -38961,41 +54086,25 @@ 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;
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
-        }
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
-        } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
-        }
+        e2ELatencyMs_ = 0F;
+
         return this;
       }
 
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_EndPointId_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Latency_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPointId.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Latency getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPointId build() {
-        context.ContextOuterClass.EndPointId result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Latency build() {
+        context.ContextOuterClass.Constraint_SLA_Latency result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -39003,23 +54112,9 @@ 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_;
-        } else {
-          result.topologyId_ = topologyIdBuilder_.build();
-        }
-        if (deviceIdBuilder_ == null) {
-          result.deviceId_ = deviceId_;
-        } else {
-          result.deviceId_ = deviceIdBuilder_.build();
-        }
-        if (endpointUuidBuilder_ == null) {
-          result.endpointUuid_ = endpointUuid_;
-        } else {
-          result.endpointUuid_ = endpointUuidBuilder_.build();
-        }
+      public context.ContextOuterClass.Constraint_SLA_Latency buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Latency result = new context.ContextOuterClass.Constraint_SLA_Latency(this);
+        result.e2ELatencyMs_ = e2ELatencyMs_;
         onBuilt();
         return result;
       }
@@ -39058,24 +54153,18 @@ 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.Constraint_SLA_Latency) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency)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());
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Latency other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) return this;
+        if (other.getE2ELatencyMs() != 0F) {
+          setE2ELatencyMs(other.getE2ELatencyMs());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -39092,11 +54181,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.Constraint_SLA_Latency parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPointId) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Latency) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -39106,361 +54195,525 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private context.ContextOuterClass.TopologyId topologyId_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.TopologyId, context.ContextOuterClass.TopologyId.Builder, context.ContextOuterClass.TopologyIdOrBuilder> topologyIdBuilder_;
+      private float e2ELatencyMs_ ;
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return Whether the topologyId field is set.
+       * <code>float e2e_latency_ms = 1;</code>
+       * @return The e2eLatencyMs.
        */
-      public boolean hasTopologyId() {
-        return topologyIdBuilder_ != null || topologyId_ != null;
+      @java.lang.Override
+      public float getE2ELatencyMs() {
+        return e2ELatencyMs_;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       * @return The topologyId.
+       * <code>float e2e_latency_ms = 1;</code>
+       * @param value The e2eLatencyMs to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.TopologyId getTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          return topologyId_ == null ? context.ContextOuterClass.TopologyId.getDefaultInstance() : topologyId_;
-        } else {
-          return topologyIdBuilder_.getMessage();
-        }
+      public Builder setE2ELatencyMs(float value) {
+        
+        e2ELatencyMs_ = value;
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.TopologyId topology_id = 1;</code>
+       * <code>float e2e_latency_ms = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setTopologyId(context.ContextOuterClass.TopologyId value) {
-        if (topologyIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          topologyId_ = value;
-          onChanged();
-        } else {
-          topologyIdBuilder_.setMessage(value);
-        }
-
+      public Builder clearE2ELatencyMs() {
+        
+        e2ELatencyMs_ = 0F;
+        onChanged();
         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());
-        }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
 
-        return this;
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
       }
-      /**
-       * <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;
+
+
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Latency)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Latency)
+    private static final context.ContextOuterClass.Constraint_SLA_Latency DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Latency();
+    }
+
+    public static context.ContextOuterClass.Constraint_SLA_Latency getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint_SLA_Latency>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Latency>() {
+      @java.lang.Override
+      public Constraint_SLA_Latency parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint_SLA_Latency(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Constraint_SLA_Latency> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint_SLA_Latency> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Latency getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface Constraint_SLA_CapacityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Capacity)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>float capacity_gbps = 1;</code>
+     * @return The capacityGbps.
+     */
+    float getCapacityGbps();
+  }
+  /**
+   * Protobuf type {@code context.Constraint_SLA_Capacity}
+   */
+  public static final class Constraint_SLA_Capacity extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Capacity)
+      Constraint_SLA_CapacityOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint_SLA_Capacity.newBuilder() to construct.
+    private Constraint_SLA_Capacity(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Constraint_SLA_Capacity() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Constraint_SLA_Capacity();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Constraint_SLA_Capacity(
+        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 13: {
+
+              capacityGbps_ = input.readFloat();
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
           }
-          onChanged();
-        } else {
-          topologyIdBuilder_.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();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+    }
 
-        return this;
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
+    }
+
+    public static final int CAPACITY_GBPS_FIELD_NUMBER = 1;
+    private float capacityGbps_;
+    /**
+     * <code>float capacity_gbps = 1;</code>
+     * @return The capacityGbps.
+     */
+    @java.lang.Override
+    public float getCapacityGbps() {
+      return capacityGbps_;
+    }
+
+    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 (capacityGbps_ != 0F) {
+        output.writeFloat(1, capacityGbps_);
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public Builder clearTopologyId() {
-        if (topologyIdBuilder_ == null) {
-          topologyId_ = null;
-          onChanged();
-        } else {
-          topologyId_ = null;
-          topologyIdBuilder_ = null;
-        }
+      unknownFields.writeTo(output);
+    }
 
-        return this;
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (capacityGbps_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(1, capacityGbps_);
       }
-      /**
-       * <code>.context.TopologyId topology_id = 1;</code>
-       */
-      public context.ContextOuterClass.TopologyId.Builder getTopologyIdBuilder() {
-        
-        onChanged();
-        return getTopologyIdFieldBuilder().getBuilder();
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
       }
-      /**
-       * <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_;
-        }
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Capacity)) {
+        return super.equals(obj);
       }
-      /**
-       * <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_;
+      context.ContextOuterClass.Constraint_SLA_Capacity other = (context.ContextOuterClass.Constraint_SLA_Capacity) obj;
+
+      if (java.lang.Float.floatToIntBits(getCapacityGbps())
+          != java.lang.Float.floatToIntBits(
+              other.getCapacityGbps())) 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();
+      hash = (37 * hash) + CAPACITY_GBPS_FIELD_NUMBER;
+      hash = (53 * hash) + java.lang.Float.floatToIntBits(
+          getCapacityGbps());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity 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_SLA_Capacity parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity 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_SLA_Capacity parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity 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_SLA_Capacity parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity 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_SLA_Capacity parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint_SLA_Capacity 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.Constraint_SLA_Capacity 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.Constraint_SLA_Capacity}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Constraint_SLA_Capacity)
+        context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Constraint_SLA_Capacity.class, context.ContextOuterClass.Constraint_SLA_Capacity.Builder.class);
       }
 
-      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.
-       */
-      public boolean hasDeviceId() {
-        return deviceIdBuilder_ != null || deviceId_ != null;
+      // Construct using context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       * @return The deviceId.
-       */
-      public context.ContextOuterClass.DeviceId getDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          return deviceId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        } else {
-          return deviceIdBuilder_.getMessage();
-        }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder setDeviceId(context.ContextOuterClass.DeviceId value) {
-        if (deviceIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          deviceId_ = value;
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(value);
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
         }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        capacityGbps_ = 0F;
 
         return this;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder setDeviceId(
-          context.ContextOuterClass.DeviceId.Builder builderForValue) {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = builderForValue.build();
-          onChanged();
-        } else {
-          deviceIdBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Capacity_descriptor;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</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;
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public Builder clearDeviceId() {
-        if (deviceIdBuilder_ == null) {
-          deviceId_ = null;
-          onChanged();
-        } else {
-          deviceId_ = null;
-          deviceIdBuilder_ = null;
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity build() {
+        context.ContextOuterClass.Constraint_SLA_Capacity result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
         }
+        return result;
+      }
 
-        return this;
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Capacity result = new context.ContextOuterClass.Constraint_SLA_Capacity(this);
+        result.capacityGbps_ = capacityGbps_;
+        onBuilt();
+        return result;
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceId.Builder getDeviceIdBuilder() {
-        
-        onChanged();
-        return getDeviceIdFieldBuilder().getBuilder();
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</code>
-       */
-      public context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder() {
-        if (deviceIdBuilder_ != null) {
-          return deviceIdBuilder_.getMessageOrBuilder();
-        } else {
-          return deviceId_ == null ?
-              context.ContextOuterClass.DeviceId.getDefaultInstance() : deviceId_;
-        }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
       }
-      /**
-       * <code>.context.DeviceId device_id = 2;</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_;
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
       }
-
-      private context.ContextOuterClass.Uuid endpointUuid_;
-      private com.google.protobuf.SingleFieldBuilderV3<
-          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> endpointUuidBuilder_;
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return Whether the endpointUuid field is set.
-       */
-      public boolean hasEndpointUuid() {
-        return endpointUuidBuilder_ != null || endpointUuid_ != null;
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       * @return The endpointUuid.
-       */
-      public context.ContextOuterClass.Uuid getEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          return endpointUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        } else {
-          return endpointUuidBuilder_.getMessage();
-        }
+      @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>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder setEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          endpointUuid_ = value;
-          onChanged();
+      @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.Constraint_SLA_Capacity) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity)other);
         } else {
-          endpointUuidBuilder_.setMessage(value);
+          super.mergeFrom(other);
+          return this;
         }
+      }
 
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Capacity other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) return this;
+        if (other.getCapacityGbps() != 0F) {
+          setCapacityGbps(other.getCapacityGbps());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
         return this;
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder setEndpointUuid(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = builderForValue.build();
-          onChanged();
-        } else {
-          endpointUuidBuilder_.setMessage(builderForValue.build());
-        }
 
-        return this;
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
       }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public Builder mergeEndpointUuid(context.ContextOuterClass.Uuid value) {
-        if (endpointUuidBuilder_ == null) {
-          if (endpointUuid_ != null) {
-            endpointUuid_ =
-              context.ContextOuterClass.Uuid.newBuilder(endpointUuid_).mergeFrom(value).buildPartial();
-          } else {
-            endpointUuid_ = value;
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.Constraint_SLA_Capacity parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Capacity) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
           }
-          onChanged();
-        } else {
-          endpointUuidBuilder_.mergeFrom(value);
         }
-
         return this;
       }
+
+      private float capacityGbps_ ;
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>float capacity_gbps = 1;</code>
+       * @return The capacityGbps.
        */
-      public Builder clearEndpointUuid() {
-        if (endpointUuidBuilder_ == null) {
-          endpointUuid_ = null;
-          onChanged();
-        } else {
-          endpointUuid_ = null;
-          endpointUuidBuilder_ = null;
-        }
-
-        return this;
+      @java.lang.Override
+      public float getCapacityGbps() {
+        return capacityGbps_;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>float capacity_gbps = 1;</code>
+       * @param value The capacityGbps to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+      public Builder setCapacityGbps(float value) {
         
+        capacityGbps_ = value;
         onChanged();
-        return getEndpointUuidFieldBuilder().getBuilder();
-      }
-      /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
-       */
-      public context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder() {
-        if (endpointUuidBuilder_ != null) {
-          return endpointUuidBuilder_.getMessageOrBuilder();
-        } else {
-          return endpointUuid_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : endpointUuid_;
-        }
+        return this;
       }
       /**
-       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       * <code>float capacity_gbps = 1;</code>
+       * @return This builder for chaining.
        */
-      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(),
-                  getParentForChildren(),
-                  isClean());
-          endpointUuid_ = null;
-        }
-        return endpointUuidBuilder_;
+      public Builder clearCapacityGbps() {
+        
+        capacityGbps_ = 0F;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -39475,128 +54728,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPointId)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Capacity)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPointId)
-    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Capacity)
+    private static final context.ContextOuterClass.Constraint_SLA_Capacity DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Capacity();
     }
 
-    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Capacity 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<Constraint_SLA_Capacity>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Capacity>() {
       @java.lang.Override
-      public EndPointId parsePartialFrom(
+      public Constraint_SLA_Capacity parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPointId(input, extensionRegistry);
+        return new Constraint_SLA_Capacity(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPointId> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Capacity> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Capacity> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Capacity getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface EndPointOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+  public interface Constraint_SLA_AvailabilityOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Availability)
       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.
-     */
-    java.lang.String getEndpointType();
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
+     * <code>uint32 num_disjoint_paths = 1;</code>
+     * @return The numDisjointPaths.
      */
-    com.google.protobuf.ByteString
-        getEndpointTypeBytes();
+    int getNumDisjointPaths();
 
     /**
-     * <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.
+     * <code>bool all_active = 2;</code>
+     * @return The allActive.
      */
-    int getKpiSampleTypesValue(int index);
+    boolean getAllActive();
   }
   /**
-   * Protobuf type {@code context.EndPoint}
+   * Protobuf type {@code context.Constraint_SLA_Availability}
    */
-  public static final class EndPoint extends
+  public static final class Constraint_SLA_Availability extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.EndPoint)
-      EndPointOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Availability)
+      Constraint_SLA_AvailabilityOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use EndPoint.newBuilder() to construct.
-    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Availability.newBuilder() to construct.
+    private Constraint_SLA_Availability(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private EndPoint() {
-      endpointType_ = "";
-      kpiSampleTypes_ = java.util.Collections.emptyList();
+    private Constraint_SLA_Availability() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new EndPoint();
+      return new Constraint_SLA_Availability();
     }
 
     @java.lang.Override
@@ -39604,7 +54811,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private EndPoint(
+    private Constraint_SLA_Availability(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -39612,7 +54819,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 {
@@ -39623,46 +54829,14 @@ public final class ContextOuterClass {
             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();
-              }
+            case 8: {
 
+              numDisjointPaths_ = input.readUInt32();
               break;
             }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
+            case 16: {
 
-              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: {
-              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);
+              allActive_ = input.readBool();
               break;
             }
             default: {
@@ -39680,147 +54854,44 @@ 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;
-    }
-
-    @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
-    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;
-      }
-    }
-    /**
-     * <code>string endpoint_type = 2;</code>
-     * @return The bytes for endpointType.
-     */
-    @java.lang.Override
-    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>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.
-     */
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_descriptor;
+    }
+
     @java.lang.Override
-    public kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleTypes(int index) {
-      return kpiSampleTypes_converter_.convert(kpiSampleTypes_.get(index));
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
     }
+
+    public static final int NUM_DISJOINT_PATHS_FIELD_NUMBER = 1;
+    private int numDisjointPaths_;
     /**
-     * <code>repeated .kpi_sample_types.KpiSampleType kpi_sample_types = 3;</code>
-     * @return A list containing the enum numeric values on the wire for kpiSampleTypes.
+     * <code>uint32 num_disjoint_paths = 1;</code>
+     * @return The numDisjointPaths.
      */
     @java.lang.Override
-    public java.util.List<java.lang.Integer>
-    getKpiSampleTypesValueList() {
-      return kpiSampleTypes_;
+    public int getNumDisjointPaths() {
+      return numDisjointPaths_;
     }
+
+    public static final int ALL_ACTIVE_FIELD_NUMBER = 2;
+    private boolean allActive_;
     /**
-     * <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>bool all_active = 2;</code>
+     * @return The allActive.
      */
     @java.lang.Override
-    public int getKpiSampleTypesValue(int index) {
-      return kpiSampleTypes_.get(index);
+    public boolean getAllActive() {
+      return allActive_;
     }
-    private int kpiSampleTypesMemoizedSerializedSize;
 
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
@@ -39836,19 +54907,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 (numDisjointPaths_ != 0) {
+        output.writeUInt32(1, numDisjointPaths_);
       }
-      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 (allActive_ != false) {
+        output.writeBool(2, allActive_);
       }
       unknownFields.writeTo(output);
     }
@@ -39859,24 +54922,13 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (endpointId_ != null) {
+      if (numDisjointPaths_ != 0) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getEndpointId());
-      }
-      if (!getEndpointTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
+          .computeUInt32Size(1, numDisjointPaths_);
       }
-      {
-        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 (allActive_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, allActive_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -39888,19 +54940,15 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.EndPoint)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Availability)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
+      context.ContextOuterClass.Constraint_SLA_Availability other = (context.ContextOuterClass.Constraint_SLA_Availability) obj;
 
-      if (hasEndpointId() != other.hasEndpointId()) return false;
-      if (hasEndpointId()) {
-        if (!getEndpointId()
-            .equals(other.getEndpointId())) return false;
-      }
-      if (!getEndpointType()
-          .equals(other.getEndpointType())) return false;
-      if (!kpiSampleTypes_.equals(other.kpiSampleTypes_)) return false;
+      if (getNumDisjointPaths()
+          != other.getNumDisjointPaths()) return false;
+      if (getAllActive()
+          != other.getAllActive()) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -39912,84 +54960,79 @@ 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();
-      }
+      hash = (37 * hash) + NUM_DISJOINT_PATHS_FIELD_NUMBER;
+      hash = (53 * hash) + getNumDisjointPaths();
+      hash = (37 * hash) + ALL_ACTIVE_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getAllActive());
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.EndPoint parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability 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.Constraint_SLA_Availability parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40002,7 +55045,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.Constraint_SLA_Availability prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40018,26 +55061,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.EndPoint}
+     * Protobuf type {@code context.Constraint_SLA_Availability}
      */
     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.Constraint_SLA_Availability)
+        context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Availability_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_Constraint_SLA_Availability_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.EndPoint.class, context.ContextOuterClass.EndPoint.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Availability.class, context.ContextOuterClass.Constraint_SLA_Availability.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.EndPoint.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Availability.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -40055,33 +55098,27 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (endpointIdBuilder_ == null) {
-          endpointId_ = null;
-        } else {
-          endpointId_ = null;
-          endpointIdBuilder_ = null;
-        }
-        endpointType_ = "";
+        numDisjointPaths_ = 0;
+
+        allActive_ = false;
 
-        kpiSampleTypes_ = java.util.Collections.emptyList();
-        bitField0_ = (bitField0_ & ~0x00000001);
         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_Constraint_SLA_Availability_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
-        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.EndPoint build() {
-        context.ContextOuterClass.EndPoint result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Availability build() {
+        context.ContextOuterClass.Constraint_SLA_Availability result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -40089,20 +55126,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_;
+      public context.ContextOuterClass.Constraint_SLA_Availability buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Availability result = new context.ContextOuterClass.Constraint_SLA_Availability(this);
+        result.numDisjointPaths_ = numDisjointPaths_;
+        result.allActive_ = allActive_;
         onBuilt();
         return result;
       }
@@ -40141,32 +55168,21 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.EndPoint) {
-          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Availability) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability)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();
+      public Builder mergeFrom(context.ContextOuterClass.Constraint_SLA_Availability other) {
+        if (other == context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) return this;
+        if (other.getNumDisjointPaths() != 0) {
+          setNumDisjointPaths(other.getNumDisjointPaths());
         }
-        if (!other.kpiSampleTypes_.isEmpty()) {
-          if (kpiSampleTypes_.isEmpty()) {
-            kpiSampleTypes_ = other.kpiSampleTypes_;
-            bitField0_ = (bitField0_ & ~0x00000001);
-          } else {
-            ensureKpiSampleTypesIsMutable();
-            kpiSampleTypes_.addAll(other.kpiSampleTypes_);
-          }
-          onChanged();
+        if (other.getAllActive() != false) {
+          setAllActive(other.getAllActive());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -40183,11 +55199,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.EndPoint parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Availability parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.EndPoint) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Availability) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -40196,339 +55212,65 @@ public final class ContextOuterClass {
         }
         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();
-        } else {
-          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.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;
-        }
-      }
+      private int numDisjointPaths_ ;
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The endpointType to set.
-       * @return This builder for chaining.
+       * <code>uint32 num_disjoint_paths = 1;</code>
+       * @return The numDisjointPaths.
        */
-      public Builder setEndpointType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        endpointType_ = value;
-        onChanged();
-        return this;
+      @java.lang.Override
+      public int getNumDisjointPaths() {
+        return numDisjointPaths_;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
+       * <code>uint32 num_disjoint_paths = 1;</code>
+       * @param value The numDisjointPaths to set.
        * @return This builder for chaining.
        */
-      public Builder clearEndpointType() {
+      public Builder setNumDisjointPaths(int value) {
         
-        endpointType_ = getDefaultInstance().getEndpointType();
+        numDisjointPaths_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string endpoint_type = 2;</code>
-       * @param value The bytes for endpointType to set.
+       * <code>uint32 num_disjoint_paths = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setEndpointTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearNumDisjointPaths() {
         
-        endpointType_ = value;
+        numDisjointPaths_ = 0;
         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);
-      }
+      private boolean allActive_ ;
       /**
-       * <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.
+       * <code>bool all_active = 2;</code>
+       * @return The allActive.
        */
-      public Builder setKpiSampleTypesValue(
-          int index, int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.set(index, value);
-        onChanged();
-        return this;
+      @java.lang.Override
+      public boolean getAllActive() {
+        return allActive_;
       }
       /**
-       * <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>bool all_active = 2;</code>
+       * @param value The allActive to set.
        * @return This builder for chaining.
        */
-      public Builder addKpiSampleTypesValue(int value) {
-        ensureKpiSampleTypesIsMutable();
-        kpiSampleTypes_.add(value);
+      public Builder setAllActive(boolean value) {
+        
+        allActive_ = value;
         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>bool all_active = 2;</code>
        * @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 clearAllActive() {
+        
+        allActive_ = false;
         onChanged();
         return this;
       }
@@ -40545,108 +55287,82 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.EndPoint)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Availability)
     }
 
-    // @@protoc_insertion_point(class_scope:context.EndPoint)
-    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Availability)
+    private static final context.ContextOuterClass.Constraint_SLA_Availability DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Availability();
     }
 
-    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Availability 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<Constraint_SLA_Availability>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Availability>() {
       @java.lang.Override
-      public EndPoint parsePartialFrom(
+      public Constraint_SLA_Availability parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new EndPoint(input, extensionRegistry);
+        return new Constraint_SLA_Availability(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<EndPoint> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Availability> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Availability> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Availability getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface ConfigRuleOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+  public interface Constraint_SLA_Isolation_levelOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint_SLA_Isolation_level)
       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>string resource_key = 2;</code>
-     * @return The resourceKey.
-     */
-    java.lang.String getResourceKey();
-    /**
-     * <code>string resource_key = 2;</code>
-     * @return The bytes for resourceKey.
-     */
-    com.google.protobuf.ByteString
-        getResourceKeyBytes();
-
-    /**
-     * <code>string resource_value = 3;</code>
-     * @return The resourceValue.
+     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The enum numeric value on the wire for isolationLevel.
      */
-    java.lang.String getResourceValue();
+    int getIsolationLevelValue();
     /**
-     * <code>string resource_value = 3;</code>
-     * @return The bytes for resourceValue.
+     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The isolationLevel.
      */
-    com.google.protobuf.ByteString
-        getResourceValueBytes();
+    context.ContextOuterClass.IsolationLevelEnum getIsolationLevel();
   }
   /**
-   * Protobuf type {@code context.ConfigRule}
+   * Protobuf type {@code context.Constraint_SLA_Isolation_level}
    */
-  public static final class ConfigRule extends
+  public static final class Constraint_SLA_Isolation_level extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:context.ConfigRule)
-      ConfigRuleOrBuilder {
+      // @@protoc_insertion_point(message_implements:context.Constraint_SLA_Isolation_level)
+      Constraint_SLA_Isolation_levelOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use ConfigRule.newBuilder() to construct.
-    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use Constraint_SLA_Isolation_level.newBuilder() to construct.
+    private Constraint_SLA_Isolation_level(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private ConfigRule() {
-      action_ = 0;
-      resourceKey_ = "";
-      resourceValue_ = "";
+    private Constraint_SLA_Isolation_level() {
+      isolationLevel_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new ConfigRule();
+      return new Constraint_SLA_Isolation_level();
     }
 
     @java.lang.Override
@@ -40654,7 +55370,7 @@ public final class ContextOuterClass {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private ConfigRule(
+    private Constraint_SLA_Isolation_level(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -40675,19 +55391,7 @@ public final class ContextOuterClass {
             case 8: {
               int rawValue = input.readEnum();
 
-              action_ = rawValue;
-              break;
-            }
-            case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              resourceKey_ = s;
-              break;
-            }
-            case 26: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              resourceValue_ = s;
+              isolationLevel_ = rawValue;
               break;
             }
             default: {
@@ -40711,110 +55415,34 @@ 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_SLA_Isolation_level_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_SLA_Isolation_level_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+              context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
     }
 
-    public static final int ACTION_FIELD_NUMBER = 1;
-    private int action_;
+    public static final int ISOLATION_LEVEL_FIELD_NUMBER = 1;
+    private int isolationLevel_;
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The enum numeric value on the wire for action.
+     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The enum numeric value on the wire for isolationLevel.
      */
-    @java.lang.Override public int getActionValue() {
-      return action_;
+    @java.lang.Override public int getIsolationLevelValue() {
+      return isolationLevel_;
     }
     /**
-     * <code>.context.ConfigActionEnum action = 1;</code>
-     * @return The action.
+     * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+     * @return The isolationLevel.
      */
-    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+    @java.lang.Override public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
       @SuppressWarnings("deprecation")
-      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
-    }
-
-    public static final int RESOURCE_KEY_FIELD_NUMBER = 2;
-    private volatile java.lang.Object resourceKey_;
-    /**
-     * <code>string resource_key = 2;</code>
-     * @return The resourceKey.
-     */
-    @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;
-      }
-    }
-    /**
-     * <code>string resource_key = 2;</code>
-     * @return The bytes for resourceKey.
-     */
-    @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 static final int RESOURCE_VALUE_FIELD_NUMBER = 3;
-    private volatile java.lang.Object resourceValue_;
-    /**
-     * <code>string resource_value = 3;</code>
-     * @return The resourceValue.
-     */
-    @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;
-      }
-    }
-    /**
-     * <code>string resource_value = 3;</code>
-     * @return The bytes for resourceValue.
-     */
-    @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;
-      }
+      context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
+      return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
     }
 
     private byte memoizedIsInitialized = -1;
@@ -40831,14 +55459,8 @@ 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 (!getResourceKeyBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, resourceKey_);
-      }
-      if (!getResourceValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, resourceValue_);
+      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
+        output.writeEnum(1, isolationLevel_);
       }
       unknownFields.writeTo(output);
     }
@@ -40849,15 +55471,9 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.getNumber()) {
+      if (isolationLevel_ != context.ContextOuterClass.IsolationLevelEnum.NO_ISOLATION.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeEnumSize(1, action_);
-      }
-      if (!getResourceKeyBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, resourceKey_);
-      }
-      if (!getResourceValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, resourceValue_);
+          .computeEnumSize(1, isolationLevel_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -40869,16 +55485,12 @@ public final class ContextOuterClass {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
+      if (!(obj instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level)) {
         return super.equals(obj);
       }
-      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
+      context.ContextOuterClass.Constraint_SLA_Isolation_level other = (context.ContextOuterClass.Constraint_SLA_Isolation_level) obj;
 
-      if (action_ != other.action_) return false;
-      if (!getResourceKey()
-          .equals(other.getResourceKey())) return false;
-      if (!getResourceValue()
-          .equals(other.getResourceValue())) return false;
+      if (isolationLevel_ != other.isolationLevel_) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -40890,80 +55502,76 @@ public final class ContextOuterClass {
       }
       int hash = 41;
       hash = (19 * hash) + getDescriptor().hashCode();
-      hash = (37 * hash) + ACTION_FIELD_NUMBER;
-      hash = (53 * hash) + action_;
-      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 = (37 * hash) + ISOLATION_LEVEL_FIELD_NUMBER;
+      hash = (53 * hash) + isolationLevel_;
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static context.ContextOuterClass.ConfigRule parseFrom(
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level 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_SLA_Isolation_level parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -40976,7 +55584,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_SLA_Isolation_level prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -40992,26 +55600,26 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * Protobuf type {@code context.ConfigRule}
+     * Protobuf type {@code context.Constraint_SLA_Isolation_level}
      */
     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_SLA_Isolation_level)
+        context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+        return context.ContextOuterClass.internal_static_context_Constraint_SLA_Isolation_level_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_SLA_Isolation_level_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+                context.ContextOuterClass.Constraint_SLA_Isolation_level.class, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder.class);
       }
 
-      // Construct using context.ContextOuterClass.ConfigRule.newBuilder()
+      // Construct using context.ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -41029,11 +55637,7 @@ public final class ContextOuterClass {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        action_ = 0;
-
-        resourceKey_ = "";
-
-        resourceValue_ = "";
+        isolationLevel_ = 0;
 
         return this;
       }
@@ -41041,17 +55645,17 @@ public final class ContextOuterClass {
       @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_SLA_Isolation_level_descriptor;
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
-        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule build() {
-        context.ContextOuterClass.ConfigRule result = buildPartial();
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level build() {
+        context.ContextOuterClass.Constraint_SLA_Isolation_level result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -41059,11 +55663,9 @@ public final class ContextOuterClass {
       }
 
       @java.lang.Override
-      public context.ContextOuterClass.ConfigRule buildPartial() {
-        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
-        result.action_ = action_;
-        result.resourceKey_ = resourceKey_;
-        result.resourceValue_ = resourceValue_;
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level buildPartial() {
+        context.ContextOuterClass.Constraint_SLA_Isolation_level result = new context.ContextOuterClass.Constraint_SLA_Isolation_level(this);
+        result.isolationLevel_ = isolationLevel_;
         onBuilt();
         return result;
       }
@@ -41102,26 +55704,18 @@ public final class ContextOuterClass {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.ConfigRule) {
-          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
+        if (other instanceof context.ContextOuterClass.Constraint_SLA_Isolation_level) {
+          return mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level)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());
-        }
-        if (!other.getResourceKey().isEmpty()) {
-          resourceKey_ = other.resourceKey_;
-          onChanged();
-        }
-        if (!other.getResourceValue().isEmpty()) {
-          resourceValue_ = other.resourceValue_;
-          onChanged();
+      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());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -41138,11 +55732,11 @@ public final class ContextOuterClass {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        context.ContextOuterClass.ConfigRule parsedMessage = null;
+        context.ContextOuterClass.Constraint_SLA_Isolation_level parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
+          parsedMessage = (context.ContextOuterClass.Constraint_SLA_Isolation_level) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -41152,208 +55746,56 @@ public final class ContextOuterClass {
         return this;
       }
 
-      private int action_ = 0;
+      private int isolationLevel_ = 0;
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The enum numeric value on the wire for action.
+       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The enum numeric value on the wire for isolationLevel.
        */
-      @java.lang.Override public int getActionValue() {
-        return action_;
+      @java.lang.Override public int getIsolationLevelValue() {
+        return isolationLevel_;
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The enum numeric value on the wire for action to set.
+       * <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.
        */
-      public Builder setActionValue(int value) {
+      public Builder setIsolationLevelValue(int value) {
         
-        action_ = value;
+        isolationLevel_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @return The action.
+       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * @return The isolationLevel.
        */
       @java.lang.Override
-      public context.ContextOuterClass.ConfigActionEnum getAction() {
+      public context.ContextOuterClass.IsolationLevelEnum getIsolationLevel() {
         @SuppressWarnings("deprecation")
-        context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
-        return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+        context.ContextOuterClass.IsolationLevelEnum result = context.ContextOuterClass.IsolationLevelEnum.valueOf(isolationLevel_);
+        return result == null ? context.ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED : result;
       }
       /**
-       * <code>.context.ConfigActionEnum action = 1;</code>
-       * @param value The action to set.
+       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
+       * @param value The isolationLevel to set.
        * @return This builder for chaining.
        */
-      public Builder setAction(context.ContextOuterClass.ConfigActionEnum value) {
+      public Builder setIsolationLevel(context.ContextOuterClass.IsolationLevelEnum 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 java.lang.Object resourceKey_ = "";
-      /**
-       * <code>string resource_key = 2;</code>
-       * @return The resourceKey.
-       */
-      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;
-        } else {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string resource_key = 2;</code>
-       * @return The bytes for resourceKey.
-       */
-      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;
-        } else {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string resource_key = 2;</code>
-       * @param value The resourceKey to set.
-       * @return This builder for chaining.
-       */
-      public Builder setResourceKey(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceKey_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string resource_key = 2;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearResourceKey() {
-        
-        resourceKey_ = getDefaultInstance().getResourceKey();
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string resource_key = 2;</code>
-       * @param value The bytes for resourceKey to set.
-       * @return This builder for chaining.
-       */
-      public Builder setResourceKeyBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        resourceKey_ = value;
-        onChanged();
-        return this;
-      }
-
-      private java.lang.Object resourceValue_ = "";
-      /**
-       * <code>string resource_value = 3;</code>
-       * @return The resourceValue.
-       */
-      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 {
-          return (java.lang.String) ref;
-        }
-      }
-      /**
-       * <code>string resource_value = 3;</code>
-       * @return The bytes for resourceValue.
-       */
-      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 {
-          return (com.google.protobuf.ByteString) ref;
-        }
-      }
-      /**
-       * <code>string resource_value = 3;</code>
-       * @param value The resourceValue to set.
-       * @return This builder for chaining.
-       */
-      public Builder setResourceValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        resourceValue_ = value;
-        onChanged();
-        return this;
-      }
-      /**
-       * <code>string resource_value = 3;</code>
-       * @return This builder for chaining.
-       */
-      public Builder clearResourceValue() {
-        
-        resourceValue_ = getDefaultInstance().getResourceValue();
+        isolationLevel_ = value.getNumber();
         onChanged();
         return this;
       }
       /**
-       * <code>string resource_value = 3;</code>
-       * @param value The bytes for resourceValue to set.
+       * <code>.context.IsolationLevelEnum isolation_level = 1;</code>
        * @return This builder for chaining.
        */
-      public Builder setResourceValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+      public Builder clearIsolationLevel() {
         
-        resourceValue_ = value;
+        isolationLevel_ = 0;
         onChanged();
         return this;
       }
@@ -41370,41 +55812,41 @@ public final class ContextOuterClass {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:context.ConfigRule)
+      // @@protoc_insertion_point(builder_scope:context.Constraint_SLA_Isolation_level)
     }
 
-    // @@protoc_insertion_point(class_scope:context.ConfigRule)
-    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:context.Constraint_SLA_Isolation_level)
+    private static final context.ContextOuterClass.Constraint_SLA_Isolation_level DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint_SLA_Isolation_level();
     }
 
-    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+    public static context.ContextOuterClass.Constraint_SLA_Isolation_level 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_SLA_Isolation_level>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint_SLA_Isolation_level>() {
       @java.lang.Override
-      public ConfigRule parsePartialFrom(
+      public Constraint_SLA_Isolation_level parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new ConfigRule(input, extensionRegistry);
+        return new Constraint_SLA_Isolation_level(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<ConfigRule> parser() {
+    public static com.google.protobuf.Parser<Constraint_SLA_Isolation_level> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+    public com.google.protobuf.Parser<Constraint_SLA_Isolation_level> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+    public context.ContextOuterClass.Constraint_SLA_Isolation_level getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -41415,34 +55857,113 @@ public final class ContextOuterClass {
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return Whether the custom field is set.
      */
-    java.lang.String getConstraintType();
+    boolean hasCustom();
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return The custom.
      */
-    com.google.protobuf.ByteString
-        getConstraintTypeBytes();
+    context.ContextOuterClass.Constraint_Custom getCustom();
+    /**
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     */
+    context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder();
 
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return Whether the schedule field is set.
      */
-    java.lang.String getConstraintValue();
+    boolean hasSchedule();
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return The schedule.
      */
-    com.google.protobuf.ByteString
-        getConstraintValueBytes();
+    context.ContextOuterClass.Constraint_Schedule getSchedule();
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     */
+    context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder();
+
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    boolean hasEndpointLocation();
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return The endpointLocation.
+     */
+    context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation();
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     */
+    context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * @return Whether the slaCapacity field is set.
+     */
+    boolean hasSlaCapacity();
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * @return The slaCapacity.
+     */
+    context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity();
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * @return Whether the slaLatency field is set.
+     */
+    boolean hasSlaLatency();
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * @return The slaLatency.
+     */
+    context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency();
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * @return Whether the slaAvailability field is set.
+     */
+    boolean hasSlaAvailability();
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * @return The slaAvailability.
+     */
+    context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability();
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder();
+
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * @return Whether the slaIsolation field is set.
+     */
+    boolean hasSlaIsolation();
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * @return The slaIsolation.
+     */
+    context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation();
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     */
+    context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder();
+
+    public context.ContextOuterClass.Constraint.ConstraintCase getConstraintCase();
   }
   /**
-   * <pre>
-   * ----- Constraint ----------------------------------------------------------------------------------------------------
-   * </pre>
-   *
    * Protobuf type {@code context.Constraint}
    */
   public static final class Constraint extends
@@ -41455,8 +55976,6 @@ public final class ContextOuterClass {
       super(builder);
     }
     private Constraint() {
-      constraintType_ = "";
-      constraintValue_ = "";
     }
 
     @java.lang.Override
@@ -41490,15 +56009,101 @@ public final class ContextOuterClass {
               done = true;
               break;
             case 10: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              constraintType_ = s;
+              context.ContextOuterClass.Constraint_Custom.Builder subBuilder = null;
+              if (constraintCase_ == 1) {
+                subBuilder = ((context.ContextOuterClass.Constraint_Custom) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_Custom.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Custom) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 1;
               break;
             }
             case 18: {
-              java.lang.String s = input.readStringRequireUtf8();
-
-              constraintValue_ = s;
+              context.ContextOuterClass.Constraint_Schedule.Builder subBuilder = null;
+              if (constraintCase_ == 2) {
+                subBuilder = ((context.ContextOuterClass.Constraint_Schedule) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_Schedule.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_Schedule) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 2;
+              break;
+            }
+            case 26: {
+              context.ContextOuterClass.Constraint_EndPointLocation.Builder subBuilder = null;
+              if (constraintCase_ == 3) {
+                subBuilder = ((context.ContextOuterClass.Constraint_EndPointLocation) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_EndPointLocation.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 3;
+              break;
+            }
+            case 34: {
+              context.ContextOuterClass.Constraint_SLA_Capacity.Builder subBuilder = null;
+              if (constraintCase_ == 4) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Capacity.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 4;
+              break;
+            }
+            case 42: {
+              context.ContextOuterClass.Constraint_SLA_Latency.Builder subBuilder = null;
+              if (constraintCase_ == 5) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Latency) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Latency.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 5;
+              break;
+            }
+            case 50: {
+              context.ContextOuterClass.Constraint_SLA_Availability.Builder subBuilder = null;
+              if (constraintCase_ == 6) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Availability) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Availability.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 6;
+              break;
+            }
+            case 58: {
+              context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder subBuilder = null;
+              if (constraintCase_ == 7) {
+                subBuilder = ((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_).toBuilder();
+              }
+              constraint_ =
+                  input.readMessage(context.ContextOuterClass.Constraint_SLA_Isolation_level.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom((context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
+                constraint_ = subBuilder.buildPartial();
+              }
+              constraintCase_ = 7;
               break;
             }
             default: {
@@ -41519,94 +56124,286 @@ public final class ContextOuterClass {
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
       }
-    }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
+    }
+
+    private int constraintCase_ = 0;
+    private java.lang.Object constraint_;
+    public enum ConstraintCase
+        implements com.google.protobuf.Internal.EnumLite,
+            com.google.protobuf.AbstractMessage.InternalOneOfEnum {
+      CUSTOM(1),
+      SCHEDULE(2),
+      ENDPOINT_LOCATION(3),
+      SLA_CAPACITY(4),
+      SLA_LATENCY(5),
+      SLA_AVAILABILITY(6),
+      SLA_ISOLATION(7),
+      CONSTRAINT_NOT_SET(0);
+      private final int value;
+      private ConstraintCase(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 ConstraintCase valueOf(int value) {
+        return forNumber(value);
+      }
+
+      public static ConstraintCase forNumber(int value) {
+        switch (value) {
+          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 0: return CONSTRAINT_NOT_SET;
+          default: return null;
+        }
+      }
+      public int getNumber() {
+        return this.value;
+      }
+    };
+
+    public ConstraintCase
+    getConstraintCase() {
+      return ConstraintCase.forNumber(
+          constraintCase_);
+    }
+
+    public static final int CUSTOM_FIELD_NUMBER = 1;
+    /**
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return Whether the custom field is set.
+     */
+    @java.lang.Override
+    public boolean hasCustom() {
+      return constraintCase_ == 1;
+    }
+    /**
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     * @return The custom.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Custom getCustom() {
+      if (constraintCase_ == 1) {
+         return (context.ContextOuterClass.Constraint_Custom) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_Custom custom = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
+      if (constraintCase_ == 1) {
+         return (context.ContextOuterClass.Constraint_Custom) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+    }
+
+    public static final int SCHEDULE_FIELD_NUMBER = 2;
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return Whether the schedule field is set.
+     */
+    @java.lang.Override
+    public boolean hasSchedule() {
+      return constraintCase_ == 2;
+    }
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     * @return The schedule.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_Schedule getSchedule() {
+      if (constraintCase_ == 2) {
+         return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_Schedule schedule = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
+      if (constraintCase_ == 2) {
+         return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+    }
+
+    public static final int ENDPOINT_LOCATION_FIELD_NUMBER = 3;
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return Whether the endpointLocation field is set.
+     */
+    @java.lang.Override
+    public boolean hasEndpointLocation() {
+      return constraintCase_ == 3;
+    }
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     * @return The endpointLocation.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
+      if (constraintCase_ == 3) {
+         return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
+      if (constraintCase_ == 3) {
+         return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+    }
+
+    public static final int SLA_CAPACITY_FIELD_NUMBER = 4;
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * @return Whether the slaCapacity field is set.
+     */
+    @java.lang.Override
+    public boolean hasSlaCapacity() {
+      return constraintCase_ == 4;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     * @return The slaCapacity.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
+      if (constraintCase_ == 4) {
+         return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
     }
 
+    public static final int SLA_LATENCY_FIELD_NUMBER = 5;
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * @return Whether the slaLatency field is set.
+     */
     @java.lang.Override
-    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-        internalGetFieldAccessorTable() {
-      return context.ContextOuterClass.internal_static_context_Constraint_fieldAccessorTable
-          .ensureFieldAccessorsInitialized(
-              context.ContextOuterClass.Constraint.class, context.ContextOuterClass.Constraint.Builder.class);
+    public boolean hasSlaLatency() {
+      return constraintCase_ == 5;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     * @return The slaLatency.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
+      if (constraintCase_ == 5) {
+         return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+    }
+    /**
+     * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
+      if (constraintCase_ == 5) {
+         return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+      }
+      return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
     }
 
-    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
-    private volatile java.lang.Object constraintType_;
+    public static final int SLA_AVAILABILITY_FIELD_NUMBER = 6;
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The constraintType.
+     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * @return Whether the slaAvailability field is set.
      */
     @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;
+    public boolean hasSlaAvailability() {
+      return constraintCase_ == 6;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+     * @return The slaAvailability.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
+      if (constraintCase_ == 6) {
+         return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
+      return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
     /**
-     * <code>string constraint_type = 1;</code>
-     * @return The bytes for constraintType.
+     * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
      */
     @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;
+    public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
+      if (constraintCase_ == 6) {
+         return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
       }
+      return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
     }
 
-    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
-    private volatile java.lang.Object constraintValue_;
+    public static final int SLA_ISOLATION_FIELD_NUMBER = 7;
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The constraintValue.
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * @return Whether the slaIsolation field is set.
      */
     @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;
+    public boolean hasSlaIsolation() {
+      return constraintCase_ == 7;
+    }
+    /**
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+     * @return The slaIsolation.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
+      if (constraintCase_ == 7) {
+         return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
+      return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
     /**
-     * <code>string constraint_value = 2;</code>
-     * @return The bytes for constraintValue.
+     * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
      */
     @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 context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
+      if (constraintCase_ == 7) {
+         return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
       }
+      return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -41623,11 +56420,26 @@ 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 (constraintCase_ == 1) {
+        output.writeMessage(1, (context.ContextOuterClass.Constraint_Custom) constraint_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      if (constraintCase_ == 2) {
+        output.writeMessage(2, (context.ContextOuterClass.Constraint_Schedule) constraint_);
+      }
+      if (constraintCase_ == 3) {
+        output.writeMessage(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+      }
+      if (constraintCase_ == 4) {
+        output.writeMessage(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+      }
+      if (constraintCase_ == 5) {
+        output.writeMessage(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+      }
+      if (constraintCase_ == 6) {
+        output.writeMessage(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 7) {
+        output.writeMessage(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       unknownFields.writeTo(output);
     }
@@ -41638,11 +56450,33 @@ public final class ContextOuterClass {
       if (size != -1) return size;
 
       size = 0;
-      if (!getConstraintTypeBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      if (constraintCase_ == 1) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, (context.ContextOuterClass.Constraint_Custom) constraint_);
       }
-      if (!getConstraintValueBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      if (constraintCase_ == 2) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, (context.ContextOuterClass.Constraint_Schedule) constraint_);
+      }
+      if (constraintCase_ == 3) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, (context.ContextOuterClass.Constraint_EndPointLocation) constraint_);
+      }
+      if (constraintCase_ == 4) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_);
+      }
+      if (constraintCase_ == 5) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, (context.ContextOuterClass.Constraint_SLA_Latency) constraint_);
+      }
+      if (constraintCase_ == 6) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, (context.ContextOuterClass.Constraint_SLA_Availability) constraint_);
+      }
+      if (constraintCase_ == 7) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -41659,10 +56493,39 @@ public final class ContextOuterClass {
       }
       context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
 
-      if (!getConstraintType()
-          .equals(other.getConstraintType())) return false;
-      if (!getConstraintValue()
-          .equals(other.getConstraintValue())) return false;
+      if (!getConstraintCase().equals(other.getConstraintCase())) return false;
+      switch (constraintCase_) {
+        case 1:
+          if (!getCustom()
+              .equals(other.getCustom())) return false;
+          break;
+        case 2:
+          if (!getSchedule()
+              .equals(other.getSchedule())) return false;
+          break;
+        case 3:
+          if (!getEndpointLocation()
+              .equals(other.getEndpointLocation())) return false;
+          break;
+        case 4:
+          if (!getSlaCapacity()
+              .equals(other.getSlaCapacity())) return false;
+          break;
+        case 5:
+          if (!getSlaLatency()
+              .equals(other.getSlaLatency())) return false;
+          break;
+        case 6:
+          if (!getSlaAvailability()
+              .equals(other.getSlaAvailability())) return false;
+          break;
+        case 7:
+          if (!getSlaIsolation()
+              .equals(other.getSlaIsolation())) return false;
+          break;
+        case 0:
+        default:
+      }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -41674,10 +56537,38 @@ 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();
+      switch (constraintCase_) {
+        case 1:
+          hash = (37 * hash) + CUSTOM_FIELD_NUMBER;
+          hash = (53 * hash) + getCustom().hashCode();
+          break;
+        case 2:
+          hash = (37 * hash) + SCHEDULE_FIELD_NUMBER;
+          hash = (53 * hash) + getSchedule().hashCode();
+          break;
+        case 3:
+          hash = (37 * hash) + ENDPOINT_LOCATION_FIELD_NUMBER;
+          hash = (53 * hash) + getEndpointLocation().hashCode();
+          break;
+        case 4:
+          hash = (37 * hash) + SLA_CAPACITY_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaCapacity().hashCode();
+          break;
+        case 5:
+          hash = (37 * hash) + SLA_LATENCY_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaLatency().hashCode();
+          break;
+        case 6:
+          hash = (37 * hash) + SLA_AVAILABILITY_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaAvailability().hashCode();
+          break;
+        case 7:
+          hash = (37 * hash) + SLA_ISOLATION_FIELD_NUMBER;
+          hash = (53 * hash) + getSlaIsolation().hashCode();
+          break;
+        case 0:
+        default:
+      }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
@@ -41774,10 +56665,6 @@ public final class ContextOuterClass {
       return builder;
     }
     /**
-     * <pre>
-     * ----- Constraint ----------------------------------------------------------------------------------------------------
-     * </pre>
-     *
      * Protobuf type {@code context.Constraint}
      */
     public static final class Builder extends
@@ -41811,278 +56698,1199 @@ public final class ContextOuterClass {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
         }
-      }
-      @java.lang.Override
-      public Builder clear() {
-        super.clear();
-        constraintType_ = "";
-
-        constraintValue_ = "";
-
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        constraintCase_ = 0;
+        constraint_ = null;
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
+        return context.ContextOuterClass.Constraint.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint build() {
+        context.ContextOuterClass.Constraint result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint buildPartial() {
+        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
+        if (constraintCase_ == 1) {
+          if (customBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = customBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 2) {
+          if (scheduleBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = scheduleBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 3) {
+          if (endpointLocationBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = endpointLocationBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 4) {
+          if (slaCapacityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaCapacityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 5) {
+          if (slaLatencyBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaLatencyBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 6) {
+          if (slaAvailabilityBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaAvailabilityBuilder_.build();
+          }
+        }
+        if (constraintCase_ == 7) {
+          if (slaIsolationBuilder_ == null) {
+            result.constraint_ = constraint_;
+          } else {
+            result.constraint_ = slaIsolationBuilder_.build();
+          }
+        }
+        result.constraintCase_ = constraintCase_;
+        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.Constraint) {
+          return mergeFrom((context.ContextOuterClass.Constraint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
+        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
+        switch (other.getConstraintCase()) {
+          case CUSTOM: {
+            mergeCustom(other.getCustom());
+            break;
+          }
+          case SCHEDULE: {
+            mergeSchedule(other.getSchedule());
+            break;
+          }
+          case ENDPOINT_LOCATION: {
+            mergeEndpointLocation(other.getEndpointLocation());
+            break;
+          }
+          case SLA_CAPACITY: {
+            mergeSlaCapacity(other.getSlaCapacity());
+            break;
+          }
+          case SLA_LATENCY: {
+            mergeSlaLatency(other.getSlaLatency());
+            break;
+          }
+          case SLA_AVAILABILITY: {
+            mergeSlaAvailability(other.getSlaAvailability());
+            break;
+          }
+          case SLA_ISOLATION: {
+            mergeSlaIsolation(other.getSlaIsolation());
+            break;
+          }
+          case CONSTRAINT_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.Constraint parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int constraintCase_ = 0;
+      private java.lang.Object constraint_;
+      public ConstraintCase
+          getConstraintCase() {
+        return ConstraintCase.forNumber(
+            constraintCase_);
+      }
+
+      public Builder clearConstraint() {
+        constraintCase_ = 0;
+        constraint_ = null;
+        onChanged();
+        return this;
+      }
+
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> customBuilder_;
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       * @return Whether the custom field is set.
+       */
+      @java.lang.Override
+      public boolean hasCustom() {
+        return constraintCase_ == 1;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       * @return The custom.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Custom getCustom() {
+        if (customBuilder_ == null) {
+          if (constraintCase_ == 1) {
+            return (context.ContextOuterClass.Constraint_Custom) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 1) {
+            return customBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder setCustom(context.ContextOuterClass.Constraint_Custom value) {
+        if (customBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          customBuilder_.setMessage(value);
+        }
+        constraintCase_ = 1;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder setCustom(
+          context.ContextOuterClass.Constraint_Custom.Builder builderForValue) {
+        if (customBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          customBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 1;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder mergeCustom(context.ContextOuterClass.Constraint_Custom value) {
+        if (customBuilder_ == null) {
+          if (constraintCase_ == 1 &&
+              constraint_ != context.ContextOuterClass.Constraint_Custom.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_Custom.newBuilder((context.ContextOuterClass.Constraint_Custom) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 1) {
+            customBuilder_.mergeFrom(value);
+          }
+          customBuilder_.setMessage(value);
+        }
+        constraintCase_ = 1;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public Builder clearCustom() {
+        if (customBuilder_ == null) {
+          if (constraintCase_ == 1) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 1) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          customBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      public context.ContextOuterClass.Constraint_Custom.Builder getCustomBuilder() {
+        return getCustomFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_CustomOrBuilder getCustomOrBuilder() {
+        if ((constraintCase_ == 1) && (customBuilder_ != null)) {
+          return customBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 1) {
+            return (context.ContextOuterClass.Constraint_Custom) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Custom custom = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder> 
+          getCustomFieldBuilder() {
+        if (customBuilder_ == null) {
+          if (!(constraintCase_ == 1)) {
+            constraint_ = context.ContextOuterClass.Constraint_Custom.getDefaultInstance();
+          }
+          customBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_Custom, context.ContextOuterClass.Constraint_Custom.Builder, context.ContextOuterClass.Constraint_CustomOrBuilder>(
+                  (context.ContextOuterClass.Constraint_Custom) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 1;
+        onChanged();;
+        return customBuilder_;
+      }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> scheduleBuilder_;
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       * @return Whether the schedule field is set.
+       */
+      @java.lang.Override
+      public boolean hasSchedule() {
+        return constraintCase_ == 2;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       * @return The schedule.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_Schedule getSchedule() {
+        if (scheduleBuilder_ == null) {
+          if (constraintCase_ == 2) {
+            return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 2) {
+            return scheduleBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder setSchedule(context.ContextOuterClass.Constraint_Schedule value) {
+        if (scheduleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          scheduleBuilder_.setMessage(value);
+        }
+        constraintCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder setSchedule(
+          context.ContextOuterClass.Constraint_Schedule.Builder builderForValue) {
+        if (scheduleBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          scheduleBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder mergeSchedule(context.ContextOuterClass.Constraint_Schedule value) {
+        if (scheduleBuilder_ == null) {
+          if (constraintCase_ == 2 &&
+              constraint_ != context.ContextOuterClass.Constraint_Schedule.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_Schedule.newBuilder((context.ContextOuterClass.Constraint_Schedule) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 2) {
+            scheduleBuilder_.mergeFrom(value);
+          }
+          scheduleBuilder_.setMessage(value);
+        }
+        constraintCase_ = 2;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public Builder clearSchedule() {
+        if (scheduleBuilder_ == null) {
+          if (constraintCase_ == 2) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 2) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          scheduleBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      public context.ContextOuterClass.Constraint_Schedule.Builder getScheduleBuilder() {
+        return getScheduleFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_ScheduleOrBuilder getScheduleOrBuilder() {
+        if ((constraintCase_ == 2) && (scheduleBuilder_ != null)) {
+          return scheduleBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 2) {
+            return (context.ContextOuterClass.Constraint_Schedule) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_Schedule schedule = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder> 
+          getScheduleFieldBuilder() {
+        if (scheduleBuilder_ == null) {
+          if (!(constraintCase_ == 2)) {
+            constraint_ = context.ContextOuterClass.Constraint_Schedule.getDefaultInstance();
+          }
+          scheduleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_Schedule, context.ContextOuterClass.Constraint_Schedule.Builder, context.ContextOuterClass.Constraint_ScheduleOrBuilder>(
+                  (context.ContextOuterClass.Constraint_Schedule) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 2;
+        onChanged();;
+        return scheduleBuilder_;
+      }
+
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> endpointLocationBuilder_;
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       * @return Whether the endpointLocation field is set.
+       */
+      @java.lang.Override
+      public boolean hasEndpointLocation() {
+        return constraintCase_ == 3;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       * @return The endpointLocation.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointLocation getEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          if (constraintCase_ == 3) {
+            return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 3) {
+            return endpointLocationBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder setEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
+        if (endpointLocationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(value);
+        }
+        constraintCase_ = 3;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder setEndpointLocation(
+          context.ContextOuterClass.Constraint_EndPointLocation.Builder builderForValue) {
+        if (endpointLocationBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          endpointLocationBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 3;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder mergeEndpointLocation(context.ContextOuterClass.Constraint_EndPointLocation value) {
+        if (endpointLocationBuilder_ == null) {
+          if (constraintCase_ == 3 &&
+              constraint_ != context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.newBuilder((context.ContextOuterClass.Constraint_EndPointLocation) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 3) {
+            endpointLocationBuilder_.mergeFrom(value);
+          }
+          endpointLocationBuilder_.setMessage(value);
+        }
+        constraintCase_ = 3;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public Builder clearEndpointLocation() {
+        if (endpointLocationBuilder_ == null) {
+          if (constraintCase_ == 3) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 3) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          endpointLocationBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      public context.ContextOuterClass.Constraint_EndPointLocation.Builder getEndpointLocationBuilder() {
+        return getEndpointLocationFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_EndPointLocationOrBuilder getEndpointLocationOrBuilder() {
+        if ((constraintCase_ == 3) && (endpointLocationBuilder_ != null)) {
+          return endpointLocationBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 3) {
+            return (context.ContextOuterClass.Constraint_EndPointLocation) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_EndPointLocation endpoint_location = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder> 
+          getEndpointLocationFieldBuilder() {
+        if (endpointLocationBuilder_ == null) {
+          if (!(constraintCase_ == 3)) {
+            constraint_ = context.ContextOuterClass.Constraint_EndPointLocation.getDefaultInstance();
+          }
+          endpointLocationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_EndPointLocation, context.ContextOuterClass.Constraint_EndPointLocation.Builder, context.ContextOuterClass.Constraint_EndPointLocationOrBuilder>(
+                  (context.ContextOuterClass.Constraint_EndPointLocation) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 3;
+        onChanged();;
+        return endpointLocationBuilder_;
+      }
+
+      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>
+       * @return Whether the slaCapacity field is set.
+       */
+      @java.lang.Override
+      public boolean hasSlaCapacity() {
+        return constraintCase_ == 4;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       * @return The slaCapacity.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Capacity getSlaCapacity() {
+        if (slaCapacityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 4) {
+            return slaCapacityBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       */
+      public Builder setSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
+        if (slaCapacityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          slaCapacityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       */
+      public Builder setSlaCapacity(
+          context.ContextOuterClass.Constraint_SLA_Capacity.Builder builderForValue) {
+        if (slaCapacityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          slaCapacityBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       */
+      public Builder mergeSlaCapacity(context.ContextOuterClass.Constraint_SLA_Capacity value) {
+        if (slaCapacityBuilder_ == null) {
+          if (constraintCase_ == 4 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.newBuilder((context.ContextOuterClass.Constraint_SLA_Capacity) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 4) {
+            slaCapacityBuilder_.mergeFrom(value);
+          }
+          slaCapacityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 4;
+        return this;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       */
+      public Builder clearSlaCapacity() {
+        if (slaCapacityBuilder_ == null) {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 4) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaCapacityBuilder_.clear();
+        }
         return this;
       }
-
-      @java.lang.Override
-      public com.google.protobuf.Descriptors.Descriptor
-          getDescriptorForType() {
-        return context.ContextOuterClass.internal_static_context_Constraint_descriptor;
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint_SLA_Capacity.Builder getSlaCapacityBuilder() {
+        return getSlaCapacityFieldBuilder().getBuilder();
       }
-
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</code>
+       */
       @java.lang.Override
-      public context.ContextOuterClass.Constraint getDefaultInstanceForType() {
-        return context.ContextOuterClass.Constraint.getDefaultInstance();
+      public context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder getSlaCapacityOrBuilder() {
+        if ((constraintCase_ == 4) && (slaCapacityBuilder_ != null)) {
+          return slaCapacityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 4) {
+            return (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+        }
       }
-
-      @java.lang.Override
-      public context.ContextOuterClass.Constraint build() {
-        context.ContextOuterClass.Constraint result = buildPartial();
-        if (!result.isInitialized()) {
-          throw newUninitializedMessageException(result);
+      /**
+       * <code>.context.Constraint_SLA_Capacity sla_capacity = 4;</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)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Capacity.getDefaultInstance();
+          }
+          slaCapacityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Capacity, context.ContextOuterClass.Constraint_SLA_Capacity.Builder, context.ContextOuterClass.Constraint_SLA_CapacityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Capacity) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
         }
-        return result;
+        constraintCase_ = 4;
+        onChanged();;
+        return slaCapacityBuilder_;
       }
 
+      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>
+       * @return Whether the slaLatency field is set.
+       */
       @java.lang.Override
-      public context.ContextOuterClass.Constraint buildPartial() {
-        context.ContextOuterClass.Constraint result = new context.ContextOuterClass.Constraint(this);
-        result.constraintType_ = constraintType_;
-        result.constraintValue_ = constraintValue_;
-        onBuilt();
-        return result;
+      public boolean hasSlaLatency() {
+        return constraintCase_ == 5;
       }
-
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       * @return The slaLatency.
+       */
       @java.lang.Override
-      public Builder clone() {
-        return super.clone();
+      public context.ContextOuterClass.Constraint_SLA_Latency getSlaLatency() {
+        if (slaLatencyBuilder_ == null) {
+          if (constraintCase_ == 5) {
+            return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 5) {
+            return slaLatencyBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+        }
       }
-      @java.lang.Override
-      public Builder setField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.setField(field, value);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       */
+      public Builder setSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
+        if (slaLatencyBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
+        } else {
+          slaLatencyBuilder_.setMessage(value);
+        }
+        constraintCase_ = 5;
+        return this;
       }
-      @java.lang.Override
-      public Builder clearField(
-          com.google.protobuf.Descriptors.FieldDescriptor field) {
-        return super.clearField(field);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       */
+      public Builder setSlaLatency(
+          context.ContextOuterClass.Constraint_SLA_Latency.Builder builderForValue) {
+        if (slaLatencyBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          slaLatencyBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 5;
+        return this;
       }
-      @java.lang.Override
-      public Builder clearOneof(
-          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
-        return super.clearOneof(oneof);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       */
+      public Builder mergeSlaLatency(context.ContextOuterClass.Constraint_SLA_Latency value) {
+        if (slaLatencyBuilder_ == null) {
+          if (constraintCase_ == 5 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.newBuilder((context.ContextOuterClass.Constraint_SLA_Latency) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 5) {
+            slaLatencyBuilder_.mergeFrom(value);
+          }
+          slaLatencyBuilder_.setMessage(value);
+        }
+        constraintCase_ = 5;
+        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);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       */
+      public Builder clearSlaLatency() {
+        if (slaLatencyBuilder_ == null) {
+          if (constraintCase_ == 5) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 5) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaLatencyBuilder_.clear();
+        }
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       */
+      public context.ContextOuterClass.Constraint_SLA_Latency.Builder getSlaLatencyBuilder() {
+        return getSlaLatencyFieldBuilder().getBuilder();
       }
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</code>
+       */
       @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof context.ContextOuterClass.Constraint) {
-          return mergeFrom((context.ContextOuterClass.Constraint)other);
+      public context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder getSlaLatencyOrBuilder() {
+        if ((constraintCase_ == 5) && (slaLatencyBuilder_ != null)) {
+          return slaLatencyBuilder_.getMessageOrBuilder();
         } else {
-          super.mergeFrom(other);
-          return this;
+          if (constraintCase_ == 5) {
+            return (context.ContextOuterClass.Constraint_SLA_Latency) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
         }
       }
-
-      public Builder mergeFrom(context.ContextOuterClass.Constraint other) {
-        if (other == context.ContextOuterClass.Constraint.getDefaultInstance()) return this;
-        if (!other.getConstraintType().isEmpty()) {
-          constraintType_ = other.constraintType_;
-          onChanged();
-        }
-        if (!other.getConstraintValue().isEmpty()) {
-          constraintValue_ = other.constraintValue_;
-          onChanged();
+      /**
+       * <code>.context.Constraint_SLA_Latency sla_latency = 5;</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)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Latency.getDefaultInstance();
+          }
+          slaLatencyBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Latency, context.ContextOuterClass.Constraint_SLA_Latency.Builder, context.ContextOuterClass.Constraint_SLA_LatencyOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Latency) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
         }
-        this.mergeUnknownFields(other.unknownFields);
-        onChanged();
-        return this;
+        constraintCase_ = 5;
+        onChanged();;
+        return slaLatencyBuilder_;
       }
 
+      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>
+       * @return Whether the slaAvailability field is set.
+       */
       @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      public boolean hasSlaAvailability() {
+        return constraintCase_ == 6;
       }
-
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       * @return The slaAvailability.
+       */
       @java.lang.Override
-      public Builder mergeFrom(
-          com.google.protobuf.CodedInputStream input,
-          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
-          throws java.io.IOException {
-        context.ContextOuterClass.Constraint parsedMessage = null;
-        try {
-          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
-        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (context.ContextOuterClass.Constraint) e.getUnfinishedMessage();
-          throw e.unwrapIOException();
-        } finally {
-          if (parsedMessage != null) {
-            mergeFrom(parsedMessage);
+      public context.ContextOuterClass.Constraint_SLA_Availability getSlaAvailability() {
+        if (slaAvailabilityBuilder_ == null) {
+          if (constraintCase_ == 6) {
+            return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        } else {
+          if (constraintCase_ == 6) {
+            return slaAvailabilityBuilder_.getMessage();
           }
+          return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
         }
-        return this;
       }
-
-      private java.lang.Object constraintType_ = "";
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return The constraintType.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
        */
-      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;
+      public Builder setSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
+        if (slaAvailabilityBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
         } else {
-          return (java.lang.String) ref;
+          slaAvailabilityBuilder_.setMessage(value);
         }
+        constraintCase_ = 6;
+        return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return The bytes for constraintType.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
        */
-      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;
+      public Builder setSlaAvailability(
+          context.ContextOuterClass.Constraint_SLA_Availability.Builder builderForValue) {
+        if (slaAvailabilityBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          slaAvailabilityBuilder_.setMessage(builderForValue.build());
         }
+        constraintCase_ = 6;
+        return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The constraintType to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
        */
-      public Builder setConstraintType(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintType_ = value;
-        onChanged();
+      public Builder mergeSlaAvailability(context.ContextOuterClass.Constraint_SLA_Availability value) {
+        if (slaAvailabilityBuilder_ == null) {
+          if (constraintCase_ == 6 &&
+              constraint_ != context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance()) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.newBuilder((context.ContextOuterClass.Constraint_SLA_Availability) constraint_)
+                .mergeFrom(value).buildPartial();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 6) {
+            slaAvailabilityBuilder_.mergeFrom(value);
+          }
+          slaAvailabilityBuilder_.setMessage(value);
+        }
+        constraintCase_ = 6;
         return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
        */
-      public Builder clearConstraintType() {
-        
-        constraintType_ = getDefaultInstance().getConstraintType();
-        onChanged();
+      public Builder clearSlaAvailability() {
+        if (slaAvailabilityBuilder_ == null) {
+          if (constraintCase_ == 6) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 6) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaAvailabilityBuilder_.clear();
+        }
         return this;
       }
       /**
-       * <code>string constraint_type = 1;</code>
-       * @param value The bytes for constraintType to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
        */
-      public Builder setConstraintTypeBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintType_ = value;
-        onChanged();
-        return this;
+      public context.ContextOuterClass.Constraint_SLA_Availability.Builder getSlaAvailabilityBuilder() {
+        return getSlaAvailabilityFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder getSlaAvailabilityOrBuilder() {
+        if ((constraintCase_ == 6) && (slaAvailabilityBuilder_ != null)) {
+          return slaAvailabilityBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 6) {
+            return (context.ContextOuterClass.Constraint_SLA_Availability) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+        }
+      }
+      /**
+       * <code>.context.Constraint_SLA_Availability sla_availability = 6;</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)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Availability.getDefaultInstance();
+          }
+          slaAvailabilityBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Availability, context.ContextOuterClass.Constraint_SLA_Availability.Builder, context.ContextOuterClass.Constraint_SLA_AvailabilityOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Availability) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 6;
+        onChanged();;
+        return slaAvailabilityBuilder_;
       }
 
-      private java.lang.Object constraintValue_ = "";
+      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>string constraint_value = 2;</code>
-       * @return The constraintValue.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * @return Whether the slaIsolation field is set.
        */
-      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;
+      @java.lang.Override
+      public boolean hasSlaIsolation() {
+        return constraintCase_ == 7;
+      }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       * @return The slaIsolation.
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level getSlaIsolation() {
+        if (slaIsolationBuilder_ == null) {
+          if (constraintCase_ == 7) {
+            return (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_;
+          }
+          return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         } else {
-          return (java.lang.String) ref;
+          if (constraintCase_ == 7) {
+            return slaIsolationBuilder_.getMessage();
+          }
+          return context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
         }
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return The bytes for constraintValue.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
        */
-      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;
+      public Builder setSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
+        if (slaIsolationBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          constraint_ = value;
+          onChanged();
         } else {
-          return (com.google.protobuf.ByteString) ref;
+          slaIsolationBuilder_.setMessage(value);
         }
+        constraintCase_ = 7;
+        return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The constraintValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
        */
-      public Builder setConstraintValue(
-          java.lang.String value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  
-        constraintValue_ = value;
-        onChanged();
+      public Builder setSlaIsolation(
+          context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder builderForValue) {
+        if (slaIsolationBuilder_ == null) {
+          constraint_ = builderForValue.build();
+          onChanged();
+        } else {
+          slaIsolationBuilder_.setMessage(builderForValue.build());
+        }
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
        */
-      public Builder clearConstraintValue() {
-        
-        constraintValue_ = getDefaultInstance().getConstraintValue();
-        onChanged();
+      public Builder mergeSlaIsolation(context.ContextOuterClass.Constraint_SLA_Isolation_level value) {
+        if (slaIsolationBuilder_ == null) {
+          if (constraintCase_ == 7 &&
+              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();
+          } else {
+            constraint_ = value;
+          }
+          onChanged();
+        } else {
+          if (constraintCase_ == 7) {
+            slaIsolationBuilder_.mergeFrom(value);
+          }
+          slaIsolationBuilder_.setMessage(value);
+        }
+        constraintCase_ = 7;
         return this;
       }
       /**
-       * <code>string constraint_value = 2;</code>
-       * @param value The bytes for constraintValue to set.
-       * @return This builder for chaining.
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
        */
-      public Builder setConstraintValueBytes(
-          com.google.protobuf.ByteString value) {
-        if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
-        
-        constraintValue_ = value;
-        onChanged();
+      public Builder clearSlaIsolation() {
+        if (slaIsolationBuilder_ == null) {
+          if (constraintCase_ == 7) {
+            constraintCase_ = 0;
+            constraint_ = null;
+            onChanged();
+          }
+        } else {
+          if (constraintCase_ == 7) {
+            constraintCase_ = 0;
+            constraint_ = null;
+          }
+          slaIsolationBuilder_.clear();
+        }
         return this;
       }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       */
+      public context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder getSlaIsolationBuilder() {
+        return getSlaIsolationFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Constraint_SLA_Isolation_level sla_isolation = 7;</code>
+       */
+      @java.lang.Override
+      public context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder getSlaIsolationOrBuilder() {
+        if ((constraintCase_ == 7) && (slaIsolationBuilder_ != null)) {
+          return slaIsolationBuilder_.getMessageOrBuilder();
+        } else {
+          if (constraintCase_ == 7) {
+            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>
+       */
+      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)) {
+            constraint_ = context.ContextOuterClass.Constraint_SLA_Isolation_level.getDefaultInstance();
+          }
+          slaIsolationBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Constraint_SLA_Isolation_level, context.ContextOuterClass.Constraint_SLA_Isolation_level.Builder, context.ContextOuterClass.Constraint_SLA_Isolation_levelOrBuilder>(
+                  (context.ContextOuterClass.Constraint_SLA_Isolation_level) constraint_,
+                  getParentForChildren(),
+                  isClean());
+          constraint_ = null;
+        }
+        constraintCase_ = 7;
+        onChanged();;
+        return slaIsolationBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -43687,6 +59495,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Uuid_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Timestamp_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Timestamp_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Event_descriptor;
   private static final 
@@ -43842,6 +59655,11 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_Slice_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_SliceOwner_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_SliceOwner_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_SliceStatus_descriptor;
   private static final 
@@ -43867,6 +59685,31 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_ConnectionId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L0_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L0_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L2_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L2_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L3_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L3_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_L4_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_L4_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionSettings_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionSettings_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Connection_descriptor;
   private static final 
@@ -43897,11 +59740,66 @@ public final class ContextOuterClass {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_EndPoint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConfigRule_Custom_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConfigRule_Custom_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConfigRule_ACL_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConfigRule_ACL_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_ConfigRule_descriptor;
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_context_ConfigRule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_Custom_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_Custom_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_Schedule_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_Schedule_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_GPS_Position_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_GPS_Position_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Location_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Location_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_EndPointLocation_descriptor;
+  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_SLA_Latency_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Latency_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Capacity_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Capacity_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Availability_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Availability_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Constraint_SLA_Isolation_level_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_SLA_Isolation_level_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_context_Constraint_descriptor;
   private static final 
@@ -43926,203 +59824,268 @@ public final class ContextOuterClass {
       descriptor;
   static {
     java.lang.String[] descriptorData = {
-      "\n\rcontext.proto\022\007context\032\026kpi_sample_typ" +
-      "es.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004uuid\030\001 \001(\t\"" +
-      "F\n\005Event\022\021\n\ttimestamp\030\001 \001(\001\022*\n\nevent_typ" +
-      "e\030\002 \001(\0162\026.context.EventTypeEnum\"0\n\tConte" +
-      "xtId\022#\n\014context_uuid\030\001 \001(\0132\r.context.Uui" +
-      "d\"\266\001\n\007Context\022&\n\ncontext_id\030\001 \001(\0132\022.cont" +
-      "ext.ContextId\022)\n\014topology_ids\030\002 \003(\0132\023.co" +
-      "ntext.TopologyId\022\'\n\013service_ids\030\003 \003(\0132\022." +
-      "context.ServiceId\022/\n\ncontroller\030\004 \001(\0132\033." +
-      "context.TeraFlowController\"8\n\rContextIdL" +
-      "ist\022\'\n\013context_ids\030\001 \003(\0132\022.context.Conte" +
-      "xtId\"1\n\013ContextList\022\"\n\010contexts\030\001 \003(\0132\020." +
-      "context.Context\"U\n\014ContextEvent\022\035\n\005event" +
-      "\030\001 \001(\0132\016.context.Event\022&\n\ncontext_id\030\002 \001" +
-      "(\0132\022.context.ContextId\"Z\n\nTopologyId\022&\n\n" +
-      "context_id\030\001 \001(\0132\022.context.ContextId\022$\n\r" +
-      "topology_uuid\030\002 \001(\0132\r.context.Uuid\"~\n\010To" +
-      "pology\022(\n\013topology_id\030\001 \001(\0132\023.context.To" +
-      "pologyId\022%\n\ndevice_ids\030\002 \003(\0132\021.context.D" +
-      "eviceId\022!\n\010link_ids\030\003 \003(\0132\017.context.Link" +
-      "Id\";\n\016TopologyIdList\022)\n\014topology_ids\030\001 \003" +
-      "(\0132\023.context.TopologyId\"5\n\014TopologyList\022" +
-      "%\n\ntopologies\030\001 \003(\0132\021.context.Topology\"X" +
-      "\n\rTopologyEvent\022\035\n\005event\030\001 \001(\0132\016.context" +
-      ".Event\022(\n\013topology_id\030\002 \001(\0132\023.context.To" +
-      "pologyId\".\n\010DeviceId\022\"\n\013device_uuid\030\001 \001(" +
-      "\0132\r.context.Uuid\"\232\002\n\006Device\022$\n\tdevice_id" +
-      "\030\001 \001(\0132\021.context.DeviceId\022\023\n\013device_type" +
-      "\030\002 \001(\t\022,\n\rdevice_config\030\003 \001(\0132\025.context." +
-      "DeviceConfig\022G\n\031device_operational_statu" +
-      "s\030\004 \001(\0162$.context.DeviceOperationalStatu" +
-      "sEnum\0221\n\016device_drivers\030\005 \003(\0162\031.context." +
-      "DeviceDriverEnum\022+\n\020device_endpoints\030\006 \003" +
-      "(\0132\021.context.EndPoint\"9\n\014DeviceConfig\022)\n" +
-      "\014config_rules\030\001 \003(\0132\023.context.ConfigRule" +
-      "\"5\n\014DeviceIdList\022%\n\ndevice_ids\030\001 \003(\0132\021.c" +
-      "ontext.DeviceId\".\n\nDeviceList\022 \n\007devices" +
-      "\030\001 \003(\0132\017.context.Device\"R\n\013DeviceEvent\022\035" +
-      "\n\005event\030\001 \001(\0132\016.context.Event\022$\n\tdevice_" +
-      "id\030\002 \001(\0132\021.context.DeviceId\"*\n\006LinkId\022 \n" +
-      "\tlink_uuid\030\001 \001(\0132\r.context.Uuid\"X\n\004Link\022" +
-      " \n\007link_id\030\001 \001(\0132\017.context.LinkId\022.\n\021lin" +
-      "k_endpoint_ids\030\002 \003(\0132\023.context.EndPointI" +
-      "d\"/\n\nLinkIdList\022!\n\010link_ids\030\001 \003(\0132\017.cont" +
-      "ext.LinkId\"(\n\010LinkList\022\034\n\005links\030\001 \003(\0132\r." +
-      "context.Link\"L\n\tLinkEvent\022\035\n\005event\030\001 \001(\013" +
-      "2\016.context.Event\022 \n\007link_id\030\002 \001(\0132\017.cont" +
-      "ext.LinkId\"X\n\tServiceId\022&\n\ncontext_id\030\001 " +
-      "\001(\0132\022.context.ContextId\022#\n\014service_uuid\030" +
-      "\002 \001(\0132\r.context.Uuid\"\246\002\n\007Service\022&\n\nserv" +
-      "ice_id\030\001 \001(\0132\022.context.ServiceId\022.\n\014serv" +
-      "ice_type\030\002 \001(\0162\030.context.ServiceTypeEnum" +
-      "\0221\n\024service_endpoint_ids\030\003 \003(\0132\023.context" +
-      ".EndPointId\0220\n\023service_constraints\030\004 \003(\013" +
-      "2\023.context.Constraint\022.\n\016service_status\030" +
-      "\005 \001(\0132\026.context.ServiceStatus\022.\n\016service" +
-      "_config\030\006 \001(\0132\026.context.ServiceConfig\"C\n" +
-      "\rServiceStatus\0222\n\016service_status\030\001 \001(\0162\032" +
-      ".context.ServiceStatusEnum\":\n\rServiceCon" +
-      "fig\022)\n\014config_rules\030\001 \003(\0132\023.context.Conf" +
-      "igRule\"8\n\rServiceIdList\022\'\n\013service_ids\030\001" +
-      " \003(\0132\022.context.ServiceId\"1\n\013ServiceList\022" +
-      "\"\n\010services\030\001 \003(\0132\020.context.Service\"U\n\014S" +
-      "erviceEvent\022\035\n\005event\030\001 \001(\0132\016.context.Eve" +
-      "nt\022&\n\nservice_id\030\002 \001(\0132\022.context.Service" +
-      "Id\"T\n\007SliceId\022&\n\ncontext_id\030\001 \001(\0132\022.cont" +
-      "ext.ContextId\022!\n\nslice_uuid\030\002 \001(\0132\r.cont" +
-      "ext.Uuid\"\225\002\n\005Slice\022\"\n\010slice_id\030\001 \001(\0132\020.c" +
-      "ontext.SliceId\022/\n\022slice_endpoint_ids\030\002 \003" +
-      "(\0132\023.context.EndPointId\022.\n\021slice_constra" +
-      "ints\030\003 \003(\0132\023.context.Constraint\022-\n\021slice" +
-      "_service_ids\030\004 \003(\0132\022.context.ServiceId\022," +
-      "\n\022slice_subslice_ids\030\005 \003(\0132\020.context.Sli" +
-      "ceId\022*\n\014slice_status\030\006 \001(\0132\024.context.Sli" +
-      "ceStatus\"=\n\013SliceStatus\022.\n\014slice_status\030" +
-      "\001 \001(\0162\030.context.SliceStatusEnum\"2\n\013Slice" +
-      "IdList\022#\n\tslice_ids\030\001 \003(\0132\020.context.Slic" +
-      "eId\"+\n\tSliceList\022\036\n\006slices\030\001 \003(\0132\016.conte" +
-      "xt.Slice\"O\n\nSliceEvent\022\035\n\005event\030\001 \001(\0132\016." +
-      "context.Event\022\"\n\010slice_id\030\002 \001(\0132\020.contex" +
-      "t.SliceId\"6\n\014ConnectionId\022&\n\017connection_" +
-      "uuid\030\001 \001(\0132\r.context.Uuid\"\304\001\n\nConnection" +
-      "\022,\n\rconnection_id\030\001 \001(\0132\025.context.Connec" +
-      "tionId\022&\n\nservice_id\030\002 \001(\0132\022.context.Ser" +
-      "viceId\0223\n\026path_hops_endpoint_ids\030\003 \003(\0132\023" +
-      ".context.EndPointId\022+\n\017sub_service_ids\030\004" +
-      " \003(\0132\022.context.ServiceId\"A\n\020ConnectionId" +
-      "List\022-\n\016connection_ids\030\001 \003(\0132\025.context.C" +
-      "onnectionId\":\n\016ConnectionList\022(\n\013connect" +
-      "ions\030\001 \003(\0132\023.context.Connection\"^\n\017Conne" +
-      "ctionEvent\022\035\n\005event\030\001 \001(\0132\016.context.Even" +
-      "t\022,\n\rconnection_id\030\002 \001(\0132\025.context.Conne" +
-      "ctionId\"\202\001\n\nEndPointId\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.context.Uuid\"\206\001\n\010EndPoint\022(\n\013end" +
-      "point_id\030\001 \001(\0132\023.context.EndPointId\022\025\n\re" +
-      "ndpoint_type\030\002 \001(\t\0229\n\020kpi_sample_types\030\003" +
-      " \003(\0162\037.kpi_sample_types.KpiSampleType\"e\n" +
-      "\nConfigRule\022)\n\006action\030\001 \001(\0162\031.context.Co" +
-      "nfigActionEnum\022\024\n\014resource_key\030\002 \001(\t\022\026\n\016" +
-      "resource_value\030\003 \001(\t\"?\n\nConstraint\022\027\n\017co" +
-      "nstraint_type\030\001 \001(\t\022\030\n\020constraint_value\030" +
-      "\002 \001(\t\"^\n\022TeraFlowController\022&\n\ncontext_i" +
-      "d\030\001 \001(\0132\022.context.ContextId\022\022\n\nip_addres" +
-      "s\030\002 \001(\t\022\014\n\004port\030\003 \001(\r\"U\n\024AuthenticationR" +
-      "esult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Cont" +
-      "extId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEventTyp" +
-      "eEnum\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTT" +
-      "YPE_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EV" +
-      "ENTTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum\022\032\n" +
-      "\026DEVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVE" +
-      "R_OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT" +
-      "_API\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRI" +
-      "VER_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRI" +
-      "VER_ONF_TR_352\020\005*\217\001\n\033DeviceOperationalSt" +
-      "atusEnum\022%\n!DEVICEOPERATIONALSTATUS_UNDE" +
-      "FINED\020\000\022$\n DEVICEOPERATIONALSTATUS_DISAB" +
-      "LED\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENABLED" +
-      "\020\002*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE_UN" +
-      "KNOWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICE" +
-      "TYPE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTI" +
-      "VITY_SERVICE\020\003*\210\001\n\021ServiceStatusEnum\022\033\n\027" +
-      "SERVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICESTAT" +
-      "US_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!" +
-      "\n\035SERVICESTATUS_PENDING_REMOVAL\020\003*\213\001\n\017Sl" +
-      "iceStatusEnum\022\031\n\025SLICESTATUS_UNDEFINED\020\000" +
-      "\022\027\n\023SLICESTATUS_PLANNED\020\001\022\024\n\020SLICESTATUS" +
-      "_INIT\020\002\022\026\n\022SLICESTATUS_ACTIVE\020\003\022\026\n\022SLICE" +
-      "STATUS_DEINIT\020\004*]\n\020ConfigActionEnum\022\032\n\026C" +
-      "ONFIGACTION_UNDEFINED\020\000\022\024\n\020CONFIGACTION_" +
-      "SET\020\001\022\027\n\023CONFIGACTION_DELETE\020\0022\357\022\n\016Conte" +
-      "xtService\022:\n\016ListContextIds\022\016.context.Em" +
-      "pty\032\026.context.ContextIdList\"\000\0226\n\014ListCon" +
-      "texts\022\016.context.Empty\032\024.context.ContextL" +
-      "ist\"\000\0224\n\nGetContext\022\022.context.ContextId\032" +
-      "\020.context.Context\"\000\0224\n\nSetContext\022\020.cont" +
-      "ext.Context\032\022.context.ContextId\"\000\0225\n\rRem" +
-      "oveContext\022\022.context.ContextId\032\016.context" +
-      ".Empty\"\000\022=\n\020GetContextEvents\022\016.context.E" +
-      "mpty\032\025.context.ContextEvent\"\0000\001\022@\n\017ListT" +
-      "opologyIds\022\022.context.ContextId\032\027.context" +
-      ".TopologyIdList\"\000\022=\n\016ListTopologies\022\022.co" +
-      "ntext.ContextId\032\025.context.TopologyList\"\000" +
-      "\0227\n\013GetTopology\022\023.context.TopologyId\032\021.c" +
-      "ontext.Topology\"\000\0227\n\013SetTopology\022\021.conte" +
-      "xt.Topology\032\023.context.TopologyId\"\000\0227\n\016Re" +
-      "moveTopology\022\023.context.TopologyId\032\016.cont" +
-      "ext.Empty\"\000\022?\n\021GetTopologyEvents\022\016.conte" +
-      "xt.Empty\032\026.context.TopologyEvent\"\0000\001\0228\n\r" +
-      "ListDeviceIds\022\016.context.Empty\032\025.context." +
-      "DeviceIdList\"\000\0224\n\013ListDevices\022\016.context." +
-      "Empty\032\023.context.DeviceList\"\000\0221\n\tGetDevic" +
-      "e\022\021.context.DeviceId\032\017.context.Device\"\000\022" +
-      "1\n\tSetDevice\022\017.context.Device\032\021.context." +
-      "DeviceId\"\000\0223\n\014RemoveDevice\022\021.context.Dev" +
-      "iceId\032\016.context.Empty\"\000\022;\n\017GetDeviceEven" +
-      "ts\022\016.context.Empty\032\024.context.DeviceEvent" +
-      "\"\0000\001\0224\n\013ListLinkIds\022\016.context.Empty\032\023.co" +
-      "ntext.LinkIdList\"\000\0220\n\tListLinks\022\016.contex" +
-      "t.Empty\032\021.context.LinkList\"\000\022+\n\007GetLink\022" +
-      "\017.context.LinkId\032\r.context.Link\"\000\022+\n\007Set" +
-      "Link\022\r.context.Link\032\017.context.LinkId\"\000\022/" +
-      "\n\nRemoveLink\022\017.context.LinkId\032\016.context." +
-      "Empty\"\000\0227\n\rGetLinkEvents\022\016.context.Empty" +
-      "\032\022.context.LinkEvent\"\0000\001\022>\n\016ListServiceI" +
-      "ds\022\022.context.ContextId\032\026.context.Service" +
-      "IdList\"\000\022:\n\014ListServices\022\022.context.Conte" +
-      "xtId\032\024.context.ServiceList\"\000\0224\n\nGetServi" +
-      "ce\022\022.context.ServiceId\032\020.context.Service" +
-      "\"\000\0224\n\nSetService\022\020.context.Service\032\022.con" +
-      "text.ServiceId\"\000\0225\n\rRemoveService\022\022.cont" +
-      "ext.ServiceId\032\016.context.Empty\"\000\022=\n\020GetSe" +
-      "rviceEvents\022\016.context.Empty\032\025.context.Se" +
-      "rviceEvent\"\0000\001\022:\n\014ListSliceIds\022\022.context" +
-      ".ContextId\032\024.context.SliceIdList\"\000\0226\n\nLi" +
-      "stSlices\022\022.context.ContextId\032\022.context.S" +
-      "liceList\"\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\013RemoveSlic" +
-      "e\022\020.context.SliceId\032\016.context.Empty\"\000\0229\n" +
-      "\016GetSliceEvents\022\016.context.Empty\032\023.contex" +
-      "t.SliceEvent\"\0000\001\022D\n\021ListConnectionIds\022\022." +
-      "context.ServiceId\032\031.context.ConnectionId" +
-      "List\"\000\022@\n\017ListConnections\022\022.context.Serv" +
-      "iceId\032\027.context.ConnectionList\"\000\022=\n\rGetC" +
-      "onnection\022\025.context.ConnectionId\032\023.conte" +
-      "xt.Connection\"\000\022=\n\rSetConnection\022\023.conte" +
-      "xt.Connection\032\025.context.ConnectionId\"\000\022;" +
-      "\n\020RemoveConnection\022\025.context.ConnectionI" +
-      "d\032\016.context.Empty\"\000\022C\n\023GetConnectionEven" +
-      "ts\022\016.context.Empty\032\030.context.ConnectionE" +
-      "vent\"\0000\001b\006proto3"
+      "\n\rcontext.proto\022\007context\032\tacl.proto\032\026kpi" +
+      "_sample_types.proto\"\007\n\005Empty\"\024\n\004Uuid\022\014\n\004" +
+      "uuid\030\001 \001(\t\"\036\n\tTimestamp\022\021\n\ttimestamp\030\001 \001" +
+      "(\001\"Z\n\005Event\022%\n\ttimestamp\030\001 \001(\0132\022.context" +
+      ".Timestamp\022*\n\nevent_type\030\002 \001(\0162\026.context" +
+      ".EventTypeEnum\"0\n\tContextId\022#\n\014context_u" +
+      "uid\030\001 \001(\0132\r.context.Uuid\"\266\001\n\007Context\022&\n\n" +
+      "context_id\030\001 \001(\0132\022.context.ContextId\022)\n\014" +
+      "topology_ids\030\002 \003(\0132\023.context.TopologyId\022" +
+      "\'\n\013service_ids\030\003 \003(\0132\022.context.ServiceId" +
+      "\022/\n\ncontroller\030\004 \001(\0132\033.context.TeraFlowC" +
+      "ontroller\"8\n\rContextIdList\022\'\n\013context_id" +
+      "s\030\001 \003(\0132\022.context.ContextId\"1\n\013ContextLi" +
+      "st\022\"\n\010contexts\030\001 \003(\0132\020.context.Context\"U" +
+      "\n\014ContextEvent\022\035\n\005event\030\001 \001(\0132\016.context." +
+      "Event\022&\n\ncontext_id\030\002 \001(\0132\022.context.Cont" +
+      "extId\"Z\n\nTopologyId\022&\n\ncontext_id\030\001 \001(\0132" +
+      "\022.context.ContextId\022$\n\rtopology_uuid\030\002 \001" +
+      "(\0132\r.context.Uuid\"~\n\010Topology\022(\n\013topolog" +
+      "y_id\030\001 \001(\0132\023.context.TopologyId\022%\n\ndevic" +
+      "e_ids\030\002 \003(\0132\021.context.DeviceId\022!\n\010link_i" +
+      "ds\030\003 \003(\0132\017.context.LinkId\";\n\016TopologyIdL" +
+      "ist\022)\n\014topology_ids\030\001 \003(\0132\023.context.Topo" +
+      "logyId\"5\n\014TopologyList\022%\n\ntopologies\030\001 \003" +
+      "(\0132\021.context.Topology\"X\n\rTopologyEvent\022\035" +
+      "\n\005event\030\001 \001(\0132\016.context.Event\022(\n\013topolog" +
+      "y_id\030\002 \001(\0132\023.context.TopologyId\".\n\010Devic" +
+      "eId\022\"\n\013device_uuid\030\001 \001(\0132\r.context.Uuid\"" +
+      "\232\002\n\006Device\022$\n\tdevice_id\030\001 \001(\0132\021.context." +
+      "DeviceId\022\023\n\013device_type\030\002 \001(\t\022,\n\rdevice_" +
+      "config\030\003 \001(\0132\025.context.DeviceConfig\022G\n\031d" +
+      "evice_operational_status\030\004 \001(\0162$.context" +
+      ".DeviceOperationalStatusEnum\0221\n\016device_d" +
+      "rivers\030\005 \003(\0162\031.context.DeviceDriverEnum\022" +
+      "+\n\020device_endpoints\030\006 \003(\0132\021.context.EndP" +
+      "oint\"9\n\014DeviceConfig\022)\n\014config_rules\030\001 \003" +
+      "(\0132\023.context.ConfigRule\"5\n\014DeviceIdList\022" +
+      "%\n\ndevice_ids\030\001 \003(\0132\021.context.DeviceId\"." +
+      "\n\nDeviceList\022 \n\007devices\030\001 \003(\0132\017.context." +
+      "Device\"R\n\013DeviceEvent\022\035\n\005event\030\001 \001(\0132\016.c" +
+      "ontext.Event\022$\n\tdevice_id\030\002 \001(\0132\021.contex" +
+      "t.DeviceId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132" +
+      "\r.context.Uuid\"X\n\004Link\022 \n\007link_id\030\001 \001(\0132" +
+      "\017.context.LinkId\022.\n\021link_endpoint_ids\030\002 " +
+      "\003(\0132\023.context.EndPointId\"/\n\nLinkIdList\022!" +
+      "\n\010link_ids\030\001 \003(\0132\017.context.LinkId\"(\n\010Lin" +
+      "kList\022\034\n\005links\030\001 \003(\0132\r.context.Link\"L\n\tL" +
+      "inkEvent\022\035\n\005event\030\001 \001(\0132\016.context.Event\022" +
+      " \n\007link_id\030\002 \001(\0132\017.context.LinkId\"X\n\tSer" +
+      "viceId\022&\n\ncontext_id\030\001 \001(\0132\022.context.Con" +
+      "textId\022#\n\014service_uuid\030\002 \001(\0132\r.context.U" +
+      "uid\"\315\002\n\007Service\022&\n\nservice_id\030\001 \001(\0132\022.co" +
+      "ntext.ServiceId\022.\n\014service_type\030\002 \001(\0162\030." +
+      "context.ServiceTypeEnum\0221\n\024service_endpo" +
+      "int_ids\030\003 \003(\0132\023.context.EndPointId\0220\n\023se" +
+      "rvice_constraints\030\004 \003(\0132\023.context.Constr" +
+      "aint\022.\n\016service_status\030\005 \001(\0132\026.context.S" +
+      "erviceStatus\022.\n\016service_config\030\006 \001(\0132\026.c" +
+      "ontext.ServiceConfig\022%\n\ttimestamp\030\007 \001(\0132" +
+      "\022.context.Timestamp\"C\n\rServiceStatus\0222\n\016" +
+      "service_status\030\001 \001(\0162\032.context.ServiceSt" +
+      "atusEnum\":\n\rServiceConfig\022)\n\014config_rule" +
+      "s\030\001 \003(\0132\023.context.ConfigRule\"8\n\rServiceI" +
+      "dList\022\'\n\013service_ids\030\001 \003(\0132\022.context.Ser" +
+      "viceId\"1\n\013ServiceList\022\"\n\010services\030\001 \003(\0132" +
+      "\020.context.Service\"U\n\014ServiceEvent\022\035\n\005eve" +
+      "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" +
+      "\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"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
+          acl.Acl.getDescriptor(),
           kpi_sample_types.KpiSampleTypes.getDescriptor(),
         });
     internal_static_context_Empty_descriptor =
@@ -44137,282 +60100,391 @@ public final class ContextOuterClass {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Uuid_descriptor,
         new java.lang.String[] { "Uuid", });
-    internal_static_context_Event_descriptor =
+    internal_static_context_Timestamp_descriptor =
       getDescriptor().getMessageTypes().get(2);
+    internal_static_context_Timestamp_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Timestamp_descriptor,
+        new java.lang.String[] { "Timestamp", });
+    internal_static_context_Event_descriptor =
+      getDescriptor().getMessageTypes().get(3);
     internal_static_context_Event_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Event_descriptor,
         new java.lang.String[] { "Timestamp", "EventType", });
     internal_static_context_ContextId_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_context_ContextId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextId_descriptor,
         new java.lang.String[] { "ContextUuid", });
     internal_static_context_Context_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(5);
     internal_static_context_Context_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Context_descriptor,
         new java.lang.String[] { "ContextId", "TopologyIds", "ServiceIds", "Controller", });
     internal_static_context_ContextIdList_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(6);
     internal_static_context_ContextIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextIdList_descriptor,
         new java.lang.String[] { "ContextIds", });
     internal_static_context_ContextList_descriptor =
-      getDescriptor().getMessageTypes().get(6);
+      getDescriptor().getMessageTypes().get(7);
     internal_static_context_ContextList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextList_descriptor,
         new java.lang.String[] { "Contexts", });
     internal_static_context_ContextEvent_descriptor =
-      getDescriptor().getMessageTypes().get(7);
+      getDescriptor().getMessageTypes().get(8);
     internal_static_context_ContextEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ContextEvent_descriptor,
         new java.lang.String[] { "Event", "ContextId", });
     internal_static_context_TopologyId_descriptor =
-      getDescriptor().getMessageTypes().get(8);
+      getDescriptor().getMessageTypes().get(9);
     internal_static_context_TopologyId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyId_descriptor,
         new java.lang.String[] { "ContextId", "TopologyUuid", });
     internal_static_context_Topology_descriptor =
-      getDescriptor().getMessageTypes().get(9);
+      getDescriptor().getMessageTypes().get(10);
     internal_static_context_Topology_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Topology_descriptor,
         new java.lang.String[] { "TopologyId", "DeviceIds", "LinkIds", });
     internal_static_context_TopologyIdList_descriptor =
-      getDescriptor().getMessageTypes().get(10);
+      getDescriptor().getMessageTypes().get(11);
     internal_static_context_TopologyIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyIdList_descriptor,
         new java.lang.String[] { "TopologyIds", });
     internal_static_context_TopologyList_descriptor =
-      getDescriptor().getMessageTypes().get(11);
+      getDescriptor().getMessageTypes().get(12);
     internal_static_context_TopologyList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyList_descriptor,
         new java.lang.String[] { "Topologies", });
     internal_static_context_TopologyEvent_descriptor =
-      getDescriptor().getMessageTypes().get(12);
+      getDescriptor().getMessageTypes().get(13);
     internal_static_context_TopologyEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_TopologyEvent_descriptor,
         new java.lang.String[] { "Event", "TopologyId", });
     internal_static_context_DeviceId_descriptor =
-      getDescriptor().getMessageTypes().get(13);
+      getDescriptor().getMessageTypes().get(14);
     internal_static_context_DeviceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceId_descriptor,
         new java.lang.String[] { "DeviceUuid", });
     internal_static_context_Device_descriptor =
-      getDescriptor().getMessageTypes().get(14);
+      getDescriptor().getMessageTypes().get(15);
     internal_static_context_Device_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Device_descriptor,
         new java.lang.String[] { "DeviceId", "DeviceType", "DeviceConfig", "DeviceOperationalStatus", "DeviceDrivers", "DeviceEndpoints", });
     internal_static_context_DeviceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(16);
     internal_static_context_DeviceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_DeviceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(17);
     internal_static_context_DeviceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceIdList_descriptor,
         new java.lang.String[] { "DeviceIds", });
     internal_static_context_DeviceList_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(18);
     internal_static_context_DeviceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceList_descriptor,
         new java.lang.String[] { "Devices", });
     internal_static_context_DeviceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(18);
+      getDescriptor().getMessageTypes().get(19);
     internal_static_context_DeviceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_DeviceEvent_descriptor,
         new java.lang.String[] { "Event", "DeviceId", });
     internal_static_context_LinkId_descriptor =
-      getDescriptor().getMessageTypes().get(19);
+      getDescriptor().getMessageTypes().get(20);
     internal_static_context_LinkId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkId_descriptor,
         new java.lang.String[] { "LinkUuid", });
     internal_static_context_Link_descriptor =
-      getDescriptor().getMessageTypes().get(20);
+      getDescriptor().getMessageTypes().get(21);
     internal_static_context_Link_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Link_descriptor,
         new java.lang.String[] { "LinkId", "LinkEndpointIds", });
     internal_static_context_LinkIdList_descriptor =
-      getDescriptor().getMessageTypes().get(21);
+      getDescriptor().getMessageTypes().get(22);
     internal_static_context_LinkIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkIdList_descriptor,
         new java.lang.String[] { "LinkIds", });
     internal_static_context_LinkList_descriptor =
-      getDescriptor().getMessageTypes().get(22);
+      getDescriptor().getMessageTypes().get(23);
     internal_static_context_LinkList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkList_descriptor,
         new java.lang.String[] { "Links", });
     internal_static_context_LinkEvent_descriptor =
-      getDescriptor().getMessageTypes().get(23);
+      getDescriptor().getMessageTypes().get(24);
     internal_static_context_LinkEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_LinkEvent_descriptor,
         new java.lang.String[] { "Event", "LinkId", });
     internal_static_context_ServiceId_descriptor =
-      getDescriptor().getMessageTypes().get(24);
+      getDescriptor().getMessageTypes().get(25);
     internal_static_context_ServiceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceId_descriptor,
         new java.lang.String[] { "ContextId", "ServiceUuid", });
     internal_static_context_Service_descriptor =
-      getDescriptor().getMessageTypes().get(25);
+      getDescriptor().getMessageTypes().get(26);
     internal_static_context_Service_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Service_descriptor,
-        new java.lang.String[] { "ServiceId", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", });
+        new java.lang.String[] { "ServiceId", "ServiceType", "ServiceEndpointIds", "ServiceConstraints", "ServiceStatus", "ServiceConfig", "Timestamp", });
     internal_static_context_ServiceStatus_descriptor =
-      getDescriptor().getMessageTypes().get(26);
+      getDescriptor().getMessageTypes().get(27);
     internal_static_context_ServiceStatus_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceStatus_descriptor,
         new java.lang.String[] { "ServiceStatus", });
     internal_static_context_ServiceConfig_descriptor =
-      getDescriptor().getMessageTypes().get(27);
+      getDescriptor().getMessageTypes().get(28);
     internal_static_context_ServiceConfig_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceConfig_descriptor,
         new java.lang.String[] { "ConfigRules", });
     internal_static_context_ServiceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(28);
+      getDescriptor().getMessageTypes().get(29);
     internal_static_context_ServiceIdList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceIdList_descriptor,
         new java.lang.String[] { "ServiceIds", });
     internal_static_context_ServiceList_descriptor =
-      getDescriptor().getMessageTypes().get(29);
+      getDescriptor().getMessageTypes().get(30);
     internal_static_context_ServiceList_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceList_descriptor,
         new java.lang.String[] { "Services", });
     internal_static_context_ServiceEvent_descriptor =
-      getDescriptor().getMessageTypes().get(30);
+      getDescriptor().getMessageTypes().get(31);
     internal_static_context_ServiceEvent_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ServiceEvent_descriptor,
         new java.lang.String[] { "Event", "ServiceId", });
     internal_static_context_SliceId_descriptor =
-      getDescriptor().getMessageTypes().get(31);
+      getDescriptor().getMessageTypes().get(32);
     internal_static_context_SliceId_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceId_descriptor,
         new java.lang.String[] { "ContextId", "SliceUuid", });
     internal_static_context_Slice_descriptor =
-      getDescriptor().getMessageTypes().get(32);
+      getDescriptor().getMessageTypes().get(33);
     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", });
+        new java.lang.String[] { "SliceId", "SliceEndpointIds", "SliceConstraints", "SliceServiceIds", "SliceSubsliceIds", "SliceStatus", "SliceOwner", "Timestamp", });
+    internal_static_context_SliceOwner_descriptor =
+      getDescriptor().getMessageTypes().get(34);
+    internal_static_context_SliceOwner_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_SliceOwner_descriptor,
+        new java.lang.String[] { "OwnerUuid", "OwnerString", });
     internal_static_context_SliceStatus_descriptor =
-      getDescriptor().getMessageTypes().get(33);
+      getDescriptor().getMessageTypes().get(35);
     internal_static_context_SliceStatus_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_SliceStatus_descriptor,
         new java.lang.String[] { "SliceStatus", });
     internal_static_context_SliceIdList_descriptor =
-      getDescriptor().getMessageTypes().get(34);
+      getDescriptor().getMessageTypes().get(36);
     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(35);
+      getDescriptor().getMessageTypes().get(37);
     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(36);
+      getDescriptor().getMessageTypes().get(38);
     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(37);
+      getDescriptor().getMessageTypes().get(39);
     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);
+    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);
+    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);
+    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);
+    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);
+    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(38);
+      getDescriptor().getMessageTypes().get(45);
     internal_static_context_Connection_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Connection_descriptor,
-        new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", });
+        new java.lang.String[] { "ConnectionId", "ServiceId", "PathHopsEndpointIds", "SubServiceIds", "Settings", });
     internal_static_context_ConnectionIdList_descriptor =
-      getDescriptor().getMessageTypes().get(39);
+      getDescriptor().getMessageTypes().get(46);
     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(40);
+      getDescriptor().getMessageTypes().get(47);
     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(41);
+      getDescriptor().getMessageTypes().get(48);
     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(42);
+      getDescriptor().getMessageTypes().get(49);
     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(43);
+      getDescriptor().getMessageTypes().get(50);
     internal_static_context_EndPoint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_EndPoint_descriptor,
-        new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", });
+        new java.lang.String[] { "EndpointId", "EndpointType", "KpiSampleTypes", "EndpointLocation", });
+    internal_static_context_ConfigRule_Custom_descriptor =
+      getDescriptor().getMessageTypes().get(51);
+    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);
+    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(44);
+      getDescriptor().getMessageTypes().get(53);
     internal_static_context_ConfigRule_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_ConfigRule_descriptor,
-        new java.lang.String[] { "Action", "ResourceKey", "ResourceValue", });
+        new java.lang.String[] { "Action", "Custom", "Acl", "ConfigRule", });
+    internal_static_context_Constraint_Custom_descriptor =
+      getDescriptor().getMessageTypes().get(54);
+    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);
+    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);
+    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);
+    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);
+    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_SLA_Latency_descriptor =
+      getDescriptor().getMessageTypes().get(59);
+    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);
+    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);
+    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);
+    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(45);
+      getDescriptor().getMessageTypes().get(63);
     internal_static_context_Constraint_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_Constraint_descriptor,
-        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
+        new java.lang.String[] { "Custom", "Schedule", "EndpointLocation", "SlaCapacity", "SlaLatency", "SlaAvailability", "SlaIsolation", "Constraint", });
     internal_static_context_TeraFlowController_descriptor =
-      getDescriptor().getMessageTypes().get(46);
+      getDescriptor().getMessageTypes().get(64);
     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(47);
+      getDescriptor().getMessageTypes().get(65);
     internal_static_context_AuthenticationResult_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_context_AuthenticationResult_descriptor,
         new java.lang.String[] { "ContextId", "Authenticated", });
+    acl.Acl.getDescriptor();
     kpi_sample_types.KpiSampleTypes.getDescriptor();
   }
 
diff --git a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
index 1ef1f0c029d1d5916eaf5ffc4f185c048a40b5a3..5d63d4aa45e578957a7a3414c33491cebe98acbe 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/Monitoring.java
@@ -72,31 +72,34 @@ public final class Monitoring {
     context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
 
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
     boolean hasServiceId();
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
     context.ContextOuterClass.ServiceId getServiceId();
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      */
     context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
    * Protobuf type {@code monitoring.KpiDescriptor}
@@ -196,6 +199,19 @@ public final class Monitoring {
 
               break;
             }
+            case 50: {
+              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;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -340,10 +356,6 @@ public final class Monitoring {
     public static final int SERVICE_ID_FIELD_NUMBER = 5;
     private context.ContextOuterClass.ServiceId serviceId_;
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return Whether the serviceId field is set.
      */
@@ -352,10 +364,6 @@ public final class Monitoring {
       return serviceId_ != null;
     }
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      * @return The serviceId.
      */
@@ -364,10 +372,6 @@ public final class Monitoring {
       return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
     }
     /**
-     * <pre>
-     *  context.SliceId    slice_id    = 6;
-     * </pre>
-     *
      * <code>.context.ServiceId service_id = 5;</code>
      */
     @java.lang.Override
@@ -375,6 +379,32 @@ public final class Monitoring {
       return getServiceId();
     }
 
+    public static final int SLICE_ID_FIELD_NUMBER = 6;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 6;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 6;</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 = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder() {
+      return getSliceId();
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -404,6 +434,9 @@ public final class Monitoring {
       if (serviceId_ != null) {
         output.writeMessage(5, getServiceId());
       }
+      if (sliceId_ != null) {
+        output.writeMessage(6, getSliceId());
+      }
       unknownFields.writeTo(output);
     }
 
@@ -432,6 +465,10 @@ public final class Monitoring {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(5, getServiceId());
       }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getSliceId());
+      }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
       return size;
@@ -465,6 +502,11 @@ public final class Monitoring {
         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;
     }
@@ -492,6 +534,10 @@ public final class Monitoring {
         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;
@@ -647,6 +693,12 @@ public final class Monitoring {
           serviceId_ = null;
           serviceIdBuilder_ = null;
         }
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
         return this;
       }
 
@@ -690,6 +742,11 @@ public final class Monitoring {
         } else {
           result.serviceId_ = serviceIdBuilder_.build();
         }
+        if (sliceIdBuilder_ == null) {
+          result.sliceId_ = sliceId_;
+        } else {
+          result.sliceId_ = sliceIdBuilder_.build();
+        }
         onBuilt();
         return result;
       }
@@ -754,6 +811,9 @@ public final class Monitoring {
         if (other.hasServiceId()) {
           mergeServiceId(other.getServiceId());
         }
+        if (other.hasSliceId()) {
+          mergeSliceId(other.getSliceId());
+        }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
         return this;
@@ -1155,10 +1215,6 @@ public final class Monitoring {
       private com.google.protobuf.SingleFieldBuilderV3<
           context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        * @return Whether the serviceId field is set.
        */
@@ -1166,10 +1222,6 @@ public final class Monitoring {
         return serviceIdBuilder_ != null || serviceId_ != null;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        * @return The serviceId.
        */
@@ -1181,10 +1233,6 @@ public final class Monitoring {
         }
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
@@ -1201,10 +1249,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder setServiceId(
@@ -1219,10 +1263,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
@@ -1241,10 +1281,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public Builder clearServiceId() {
@@ -1259,10 +1295,6 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
@@ -1271,10 +1303,6 @@ public final class Monitoring {
         return getServiceIdFieldBuilder().getBuilder();
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
@@ -1286,10 +1314,6 @@ public final class Monitoring {
         }
       }
       /**
-       * <pre>
-       *  context.SliceId    slice_id    = 6;
-       * </pre>
-       *
        * <code>.context.ServiceId service_id = 5;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
@@ -1305,6 +1329,125 @@ public final class Monitoring {
         }
         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 = 6;</code>
+       * @return Whether the sliceId field is set.
+       */
+      public boolean hasSliceId() {
+        return sliceIdBuilder_ != null || sliceId_ != null;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</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 = 6;</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 = 6;</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 = 6;</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 = 6;</code>
+       */
+      public Builder clearSliceId() {
+        if (sliceIdBuilder_ == null) {
+          sliceId_ = null;
+          onChanged();
+        } else {
+          sliceId_ = null;
+          sliceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</code>
+       */
+      public context.ContextOuterClass.SliceId.Builder getSliceIdBuilder() {
+        
+        onChanged();
+        return getSliceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.SliceId slice_id = 6;</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 = 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(),
+                  getParentForChildren(),
+                  isClean());
+          sliceId_ = null;
+        }
+        return sliceIdBuilder_;
+      }
       @java.lang.Override
       public final Builder setUnknownFields(
           final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -1358,57 +1501,140 @@ public final class Monitoring {
 
   }
 
-  public interface MonitorKpiRequestOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.MonitorKpiRequest)
+  public interface BundleKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.BundleKpiDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
-    boolean hasKpiId();
+    java.lang.String getKpiDescription();
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
-    monitoring.Monitoring.KpiId getKpiId();
+    com.google.protobuf.ByteString
+        getKpiDescriptionBytes();
+
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
-    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder();
+    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>float sampling_duration_s = 2;</code>
-     * @return The samplingDurationS.
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The enum numeric value on the wire for kpiSampleType.
      */
-    float getSamplingDurationS();
+    int getKpiSampleTypeValue();
+    /**
+     * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
 
     /**
-     * <code>float sampling_interval_s = 3;</code>
-     * @return The samplingIntervalS.
+     * <code>.context.DeviceId device_id = 4;</code>
+     * @return Whether the deviceId field is set.
      */
-    float getSamplingIntervalS();
+    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();
+
+    /**
+     * <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>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <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>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.MonitorKpiRequest}
+   * Protobuf type {@code monitoring.BundleKpiDescriptor}
    */
-  public static final class MonitorKpiRequest extends
+  public static final class BundleKpiDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.MonitorKpiRequest)
-      MonitorKpiRequestOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.BundleKpiDescriptor)
+      BundleKpiDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use MonitorKpiRequest.newBuilder() to construct.
-    private MonitorKpiRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use BundleKpiDescriptor.newBuilder() to construct.
+    private BundleKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private MonitorKpiRequest() {
+    private BundleKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new MonitorKpiRequest();
+      return new BundleKpiDescriptor();
     }
 
     @java.lang.Override
@@ -1416,7 +1642,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private MonitorKpiRequest(
+    private BundleKpiDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -1424,6 +1650,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 {
@@ -1435,26 +1662,76 @@ 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();
-              }
+              java.lang.String s = input.readStringRequireUtf8();
 
+              kpiDescription_ = s;
               break;
             }
-            case 21: {
-
-              samplingDurationS_ = input.readFloat();
+            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 29: {
+            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();
+              }
+              endpointId_ = input.readMessage(context.ContextOuterClass.EndPointId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(endpointId_);
+                endpointId_ = 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();
+              }
+
+              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();
+              }
 
-              samplingIntervalS_ = input.readFloat();
               break;
             }
             default: {
@@ -1472,69 +1749,225 @@ 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_MonitorKpiRequest_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+      return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+              monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private monitoring.Monitoring.KpiId kpiId_;
+    public static final int KPI_DESCRIPTION_FIELD_NUMBER = 1;
+    private volatile java.lang.Object kpiDescription_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return Whether the kpiId field is set.
+     * <code>string kpi_description = 1;</code>
+     * @return The kpiDescription.
      */
     @java.lang.Override
-    public boolean hasKpiId() {
-      return kpiId_ != null;
+    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;
+      }
     }
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
-     * @return The kpiId.
+     * <code>string kpi_description = 1;</code>
+     * @return The bytes for kpiDescription.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getKpiId() {
-      return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+    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 = 2;
+    private java.util.List<monitoring.Monitoring.KpiId> kpiIdList_;
     /**
-     * <code>.monitoring.KpiId kpi_id = 1;</code>
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-      return getKpiId();
+    public java.util.List<monitoring.Monitoring.KpiId> getKpiIdListList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiIdOrBuilder> 
+        getKpiIdListOrBuilderList() {
+      return kpiIdList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public int getKpiIdListCount() {
+      return kpiIdList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getKpiIdList(int index) {
+      return kpiIdList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiId kpi_id_list = 2;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiIdOrBuilder getKpiIdListOrBuilder(
+        int index) {
+      return kpiIdList_.get(index);
     }
 
-    public static final int SAMPLING_DURATION_S_FIELD_NUMBER = 2;
-    private float samplingDurationS_;
+    public static final int KPI_SAMPLE_TYPE_FIELD_NUMBER = 3;
+    private int kpiSampleType_;
     /**
-     * <code>float sampling_duration_s = 2;</code>
-     * @return The samplingDurationS.
+     * <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 float getSamplingDurationS() {
-      return samplingDurationS_;
+    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 SAMPLING_INTERVAL_S_FIELD_NUMBER = 3;
-    private float samplingIntervalS_;
+    public static final int ENDPOINT_ID_FIELD_NUMBER = 5;
+    private context.ContextOuterClass.EndPointId endpointId_;
     /**
-     * <code>float sampling_interval_s = 3;</code>
-     * @return The samplingIntervalS.
+     * <code>.context.EndPointId endpoint_id = 5;</code>
+     * @return Whether the endpointId field is set.
      */
     @java.lang.Override
-    public float getSamplingIntervalS() {
-      return samplingIntervalS_;
+    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;
@@ -1551,14 +1984,26 @@ 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_);
       }
-      if (samplingDurationS_ != 0F) {
-        output.writeFloat(2, samplingDurationS_);
+      for (int i = 0; i < kpiIdList_.size(); i++) {
+        output.writeMessage(2, kpiIdList_.get(i));
       }
-      if (samplingIntervalS_ != 0F) {
-        output.writeFloat(3, samplingIntervalS_);
+      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 (serviceId_ != null) {
+        output.writeMessage(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        output.writeMessage(7, getSliceId());
       }
       unknownFields.writeTo(output);
     }
@@ -1569,17 +2014,32 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
+      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(1, getKpiId());
+          .computeMessageSize(2, kpiIdList_.get(i));
       }
-      if (samplingDurationS_ != 0F) {
+      if (kpiSampleType_ != kpi_sample_types.KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN.getNumber()) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(2, samplingDurationS_);
+          .computeEnumSize(3, kpiSampleType_);
       }
-      if (samplingIntervalS_ != 0F) {
+      if (deviceId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(3, samplingIntervalS_);
+          .computeMessageSize(4, getDeviceId());
+      }
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getEndpointId());
+      }
+      if (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceId());
+      }
+      if (sliceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(7, getSliceId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -1591,22 +2051,36 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.MonitorKpiRequest)) {
+      if (!(obj instanceof monitoring.Monitoring.BundleKpiDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.MonitorKpiRequest other = (monitoring.Monitoring.MonitorKpiRequest) obj;
+      monitoring.Monitoring.BundleKpiDescriptor other = (monitoring.Monitoring.BundleKpiDescriptor) 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 (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 (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -1618,84 +2092,98 @@ 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()) {
+        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 = (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 = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor 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(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.ByteString data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor 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)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor 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)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor 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)
+    public static monitoring.Monitoring.BundleKpiDescriptor parseDelimitedFrom(java.io.InputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseDelimitedWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseDelimitedFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor 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(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input)
         throws java.io.IOException {
       return com.google.protobuf.GeneratedMessageV3
           .parseWithIOException(PARSER, input);
     }
-    public static monitoring.Monitoring.MonitorKpiRequest parseFrom(
+    public static monitoring.Monitoring.BundleKpiDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -1708,7 +2196,7 @@ public final class Monitoring {
     public static Builder newBuilder() {
       return DEFAULT_INSTANCE.toBuilder();
     }
-    public static Builder newBuilder(monitoring.Monitoring.MonitorKpiRequest prototype) {
+    public static Builder newBuilder(monitoring.Monitoring.BundleKpiDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -1724,26 +2212,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.MonitorKpiRequest}
+     * Protobuf type {@code monitoring.BundleKpiDescriptor}
      */
     public static final class Builder extends
         com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-        // @@protoc_insertion_point(builder_implements:monitoring.MonitorKpiRequest)
-        monitoring.Monitoring.MonitorKpiRequestOrBuilder {
+        // @@protoc_insertion_point(builder_implements:monitoring.BundleKpiDescriptor)
+        monitoring.Monitoring.BundleKpiDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
       protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
           internalGetFieldAccessorTable() {
-        return monitoring.Monitoring.internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.MonitorKpiRequest.class, monitoring.Monitoring.MonitorKpiRequest.Builder.class);
+                monitoring.Monitoring.BundleKpiDescriptor.class, monitoring.Monitoring.BundleKpiDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.MonitorKpiRequest.newBuilder()
+      // Construct using monitoring.Monitoring.BundleKpiDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -1756,38 +2244,63 @@ 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;
+        kpiDescription_ = "";
+
+        if (kpiIdListBuilder_ == null) {
+          kpiIdList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          kpiIdListBuilder_.clear();
         }
-        samplingDurationS_ = 0F;
-
-        samplingIntervalS_ = 0F;
+        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_MonitorKpiRequest_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_BundleKpiDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
-        return monitoring.Monitoring.MonitorKpiRequest.getDefaultInstance();
+      public monitoring.Monitoring.BundleKpiDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest build() {
-        monitoring.Monitoring.MonitorKpiRequest result = buildPartial();
+      public monitoring.Monitoring.BundleKpiDescriptor build() {
+        monitoring.Monitoring.BundleKpiDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -1795,15 +2308,40 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.MonitorKpiRequest buildPartial() {
-        monitoring.Monitoring.MonitorKpiRequest result = new monitoring.Monitoring.MonitorKpiRequest(this);
-        if (kpiIdBuilder_ == null) {
-          result.kpiId_ = kpiId_;
+      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.kpiId_ = kpiIdBuilder_.build();
+          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();
         }
-        result.samplingDurationS_ = samplingDurationS_;
-        result.samplingIntervalS_ = samplingIntervalS_;
         onBuilt();
         return result;
       }
@@ -1842,24 +2380,60 @@ public final class Monitoring {
       }
       @java.lang.Override
       public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.MonitorKpiRequest) {
-          return mergeFrom((monitoring.Monitoring.MonitorKpiRequest)other);
+        if (other instanceof monitoring.Monitoring.BundleKpiDescriptor) {
+          return mergeFrom((monitoring.Monitoring.BundleKpiDescriptor)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());
+      public Builder mergeFrom(monitoring.Monitoring.BundleKpiDescriptor other) {
+        if (other == monitoring.Monitoring.BundleKpiDescriptor.getDefaultInstance()) return this;
+        if (!other.getKpiDescription().isEmpty()) {
+          kpiDescription_ = other.kpiDescription_;
+          onChanged();
         }
-        if (other.getSamplingDurationS() != 0F) {
-          setSamplingDurationS(other.getSamplingDurationS());
+        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.getSamplingIntervalS() != 0F) {
-          setSamplingIntervalS(other.getSamplingIntervalS());
+        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();
@@ -1876,11 +2450,11 @@ public final class Monitoring {
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws java.io.IOException {
-        monitoring.Monitoring.MonitorKpiRequest parsedMessage = null;
+        monitoring.Monitoring.BundleKpiDescriptor parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.MonitorKpiRequest) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.BundleKpiDescriptor) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -1889,186 +2463,13654 @@ 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_;
+      private java.lang.Object kpiDescription_ = "";
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
-       * @return Whether the kpiId field is set.
+       * <code>string kpi_description = 1;</code>
+       * @return The kpiDescription.
        */
-      public boolean hasKpiId() {
-        return kpiIdBuilder_ != null || kpiId_ != null;
+      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>.monitoring.KpiId kpi_id = 1;</code>
-       * @return The kpiId.
+       * <code>string kpi_description = 1;</code>
+       * @return The bytes for kpiDescription.
        */
-      public monitoring.Monitoring.KpiId getKpiId() {
-        if (kpiIdBuilder_ == null) {
-          return kpiId_ == null ? monitoring.Monitoring.KpiId.getDefaultInstance() : 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;
         } else {
-          return kpiIdBuilder_.getMessage();
+          return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (value == null) {
-            throw new NullPointerException();
-          }
-          kpiId_ = value;
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(value);
-        }
-
+      public Builder setKpiDescription(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        kpiDescription_ = value;
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @return This builder for chaining.
        */
-      public Builder setKpiId(
-          monitoring.Monitoring.KpiId.Builder builderForValue) {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = builderForValue.build();
-          onChanged();
-        } else {
-          kpiIdBuilder_.setMessage(builderForValue.build());
-        }
-
+      public Builder clearKpiDescription() {
+        
+        kpiDescription_ = getDefaultInstance().getKpiDescription();
+        onChanged();
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>string kpi_description = 1;</code>
+       * @param value The bytes for kpiDescription to set.
+       * @return This builder for chaining.
        */
-      public Builder mergeKpiId(monitoring.Monitoring.KpiId value) {
-        if (kpiIdBuilder_ == null) {
-          if (kpiId_ != null) {
-            kpiId_ =
-              monitoring.Monitoring.KpiId.newBuilder(kpiId_).mergeFrom(value).buildPartial();
-          } else {
+      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 = 2;</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 = 2;</code>
+       */
+      public int getKpiIdListCount() {
+        if (kpiIdListBuilder_ == null) {
+          return kpiIdList_.size();
+        } else {
+          return kpiIdListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id_list = 2;</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();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiIdList_);
+        }
+      }
+      /**
+       * <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>
+       */
+      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 = 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>
+       * @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 = 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;
+      }
+      /**
+       * <code>.kpi_sample_types.KpiSampleType kpi_sample_type = 3;</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 = 3;</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 = 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();
+        }
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+        }
+
+        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_;
+      }
+
+      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);
+        }
+
+        return this;
+      }
+      /**
+       * <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);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.EndPointId endpoint_id = 5;</code>
+       */
+      public Builder clearEndpointId() {
+        if (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+          onChanged();
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+
+        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;
+    }
+
+  }
+
+  public interface EditedKpiDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.EditedKpiDescriptor)
+      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>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);
+    /**
+     * <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 = 4;</code>
+     * @return The kpiSampleType.
+     */
+    kpi_sample_types.KpiSampleTypes.KpiSampleType getKpiSampleType();
+
+    /**
+     * <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>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDeviceIdOrBuilder();
+
+    /**
+     * <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>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
+     */
+    boolean hasServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return The serviceId.
+     */
+    context.ContextOuterClass.ServiceId getServiceId();
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder();
+
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
+     */
+    boolean hasSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return The sliceId.
+     */
+    context.ContextOuterClass.SliceId getSliceId();
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     */
+    context.ContextOuterClass.SliceIdOrBuilder getSliceIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.EditedKpiDescriptor}
+   */
+  public static final class EditedKpiDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.EditedKpiDescriptor)
+      EditedKpiDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EditedKpiDescriptor.newBuilder() to construct.
+    private EditedKpiDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EditedKpiDescriptor() {
+      kpiDescription_ = "";
+      kpiIdList_ = java.util.Collections.emptyList();
+      kpiSampleType_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EditedKpiDescriptor();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EditedKpiDescriptor(
+        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: {
+              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>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiIdList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry));
+              break;
+            }
+            case 32: {
+              int rawValue = input.readEnum();
+
+              kpiSampleType_ = rawValue;
+              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();
+              }
+
+              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();
+              }
+
+              break;
+            }
+            case 58: {
+              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 66: {
+              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;
+            }
+            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)) {
+          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_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);
+    }
+
+    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 = 2;</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;
+      }
+    }
+    /**
+     * <code>string kpi_description = 2;</code>
+     * @return The bytes for kpiDescription.
+     */
+    @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(
+        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;
+    }
+
+    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_;
+    }
+    /**
+     * <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 = 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;
+    }
+    /**
+     * <code>.context.EndPointId endpoint_id = 6;</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 = 6;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getEndpointIdOrBuilder() {
+      return getEndpointId();
+    }
+
+    public static final int SERVICE_ID_FIELD_NUMBER = 7;
+    private context.ContextOuterClass.ServiceId serviceId_;
+    /**
+     * <code>.context.ServiceId service_id = 7;</code>
+     * @return Whether the serviceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceId() {
+      return serviceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId service_id = 7;</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 = 7;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+      return getServiceId();
+    }
+
+    public static final int SLICE_ID_FIELD_NUMBER = 8;
+    private context.ContextOuterClass.SliceId sliceId_;
+    /**
+     * <code>.context.SliceId slice_id = 8;</code>
+     * @return Whether the sliceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSliceId() {
+      return sliceId_ != null;
+    }
+    /**
+     * <code>.context.SliceId slice_id = 8;</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 = 8;</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;
+    }
+
+    @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_;
+      }
+
+      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;
+      }
+      /**
+       * <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 float getSamplingRateS() {
+        return samplingRateS_;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+      }
+      @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.MonitorKpiRequest)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
+    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
+    }
+
+    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    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 com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  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>
+     */
+    monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder(
+        int index);
+
+    /**
+     * <code>float monitoring_window_s = 2;</code>
+     * @return The monitoringWindowS.
+     */
+    float getMonitoringWindowS();
+
+    /**
+     * <code>float sampling_rate_s = 3;</code>
+     * @return The samplingRateS.
+     */
+    float getSamplingRateS();
+
+    /**
+     * <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();
+
+    /**
+     * <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();
+
+    /**
+     * <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_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiQuery();
+    }
+
+    @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();
+      }
+      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: {
+
+              samplingRateS_ = input.readFloat();
+              break;
+            }
+            case 32: {
+
+              lastNSamples_ = input.readUInt32();
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              startDate_ = s;
+              break;
+            }
+            case 50: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              endDate_ = s;
+              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)) {
+          kpiId_ = java.util.Collections.unmodifiableList(kpiId_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    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;
+      }
+    }
+
+    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;
+      }
+    }
+
+    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 < kpiId_.size(); i++) {
+        output.writeMessage(1, kpiId_.get(i));
+      }
+      if (monitoringWindowS_ != 0F) {
+        output.writeFloat(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        output.writeFloat(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        output.writeUInt32(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, endDate_);
+      }
+      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));
+      }
+      if (monitoringWindowS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, monitoringWindowS_);
+      }
+      if (samplingRateS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(3, samplingRateS_);
+      }
+      if (lastNSamples_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(4, lastNSamples_);
+      }
+      if (!getStartDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, startDate_);
+      }
+      if (!getEndDateBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, endDate_);
+      }
+      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;
+
+      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;
+      }
+      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();
+      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;
+      }
+
+      @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);
+      }
+
+      // Construct using monitoring.Monitoring.KpiQuery.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      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;
+
+        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);
+        }
+        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);
+          }
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        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();
+      }
+      @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;
+        }
+      }
+
+      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();
+          }
+        } 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());
+        }
+        if (other.getSamplingRateS() != 0F) {
+          setSamplingRateS(other.getSamplingRateS());
+        }
+        if (other.getLastNSamples() != 0) {
+          setLastNSamples(other.getLastNSamples());
+        }
+        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.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 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;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          monitoring.Monitoring.KpiId, monitoring.Monitoring.KpiId.Builder, monitoring.Monitoring.KpiIdOrBuilder> kpiIdBuilder_;
+
+      /**
+       * <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();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiId kpi_id = 1;</code>
+       */
+      public int getKpiIdCount() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_.size();
+        } else {
+          return kpiIdBuilder_.getCount();
+        }
+      }
+      /**
+       * <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);
+        }
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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());
+      }
+      /**
+       * <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() {
+        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_;
+      }
+
+      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;
+      }
+      /**
+       * <code>float monitoring_window_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearMonitoringWindowS() {
+        
+        monitoringWindowS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingRateS_ ;
+      /**
+       * <code>float sampling_rate_s = 3;</code>
+       * @return The samplingRateS.
+       */
+      @java.lang.Override
+      public float getSamplingRateS() {
+        return samplingRateS_;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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
+      public int getLastNSamples() {
+        return lastNSamples_;
+      }
+      /**
+       * <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 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.
+       */
+      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;
+        }
+      }
+      /**
+       * <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.
+       */
+      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;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <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.
+       */
+      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 = 5;</code>
+       * @param value The bytes for startDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
+        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.
+       */
+      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;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <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.
+       */
+      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;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <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.
+       */
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <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.
+       */
+      public Builder clearEndDate() {
+        
+        endDate_ = getDefaultInstance().getEndDate();
+        onChanged();
+        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 bytes for endDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        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);
+      }
+
+
+      // @@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 KpiQuery parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          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;
+            }
+          }
+        }
+      } 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_KpiId_descriptor;
+    }
+
+    @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);
+    }
+
+    @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());
+      }
+      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.KpiId)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+
+      if (hasKpiId() != other.hasKpiId()) return false;
+      if (hasKpiId()) {
+        if (!getKpiId()
+            .equals(other.getKpiId())) 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 = (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;
+      }
+
+      @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);
+      }
+
+      // Construct using monitoring.Monitoring.KpiId.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;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId build() {
+        monitoring.Monitoring.KpiId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiId buildPartial() {
+        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.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.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;
+      }
+
+      @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 context.ContextOuterClass.Uuid kpiId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> kpiIdBuilder_;
+      /**
+       * <code>.context.Uuid 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>
+       * @return The kpiId.
+       */
+      public context.ContextOuterClass.Uuid getKpiId() {
+        if (kpiIdBuilder_ == null) {
+          return kpiId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        } else {
+          return kpiIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      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;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public Builder setKpiId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      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 {
+          kpiIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public Builder clearKpiId() {
+        if (kpiIdBuilder_ == null) {
+          kpiId_ = null;
+          onChanged();
+        } else {
+          kpiId_ = null;
+          kpiIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+        if (kpiIdBuilder_ != null) {
+          return kpiIdBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
+        }
+      }
+      /**
+       * <code>.context.Uuid kpi_id = 1;</code>
+       */
+      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(
+          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.KpiId)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
+    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+    }
+
+    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiId>
+        PARSER = new com.google.protobuf.AbstractParser<KpiId>() {
+      @java.lang.Override
+      public KpiId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+      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>string timestamp = 2;</code>
+     * @return The timestamp.
+     */
+    java.lang.String getTimestamp();
+    /**
+     * <code>string timestamp = 2;</code>
+     * @return The bytes for timestamp.
+     */
+    com.google.protobuf.ByteString
+        getTimestampBytes();
+
+    /**
+     * <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.Kpi}
+   */
+  public static final class Kpi extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
+      KpiOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Kpi.newBuilder() to construct.
+    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Kpi() {
+      timestamp_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Kpi();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Kpi(
+        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 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              timestamp_ = s;
+              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)) {
+                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_Kpi_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.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 TIMESTAMP_FIELD_NUMBER = 2;
+    private volatile java.lang.Object timestamp_;
+    /**
+     * <code>string timestamp = 2;</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 timestamp = 2;</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;
+      }
+    }
+
+    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() {
+      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 (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
+      }
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
+      }
+      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 (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
+      }
+      if (kpiValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, getKpiValue());
+      }
+      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.Kpi)) {
+        return super.equals(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 (!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;
+    }
+
+    @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) + 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.Kpi parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Kpi parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Kpi parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Kpi parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.Kpi parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.Kpi parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.Kpi 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.Kpi 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.Kpi}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_Kpi_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_Kpi_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.Kpi.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;
+        }
+        timestamp_ = "";
+
+        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_Kpi_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.Kpi build() {
+        monitoring.Monitoring.Kpi result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      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();
+        }
+        result.timestamp_ = timestamp_;
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.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.Kpi) {
+          return mergeFrom((monitoring.Monitoring.Kpi)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());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          onChanged();
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
+        }
+        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.Kpi parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.Kpi) 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_;
+      }
+
+      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;
+        }
+      }
+      /**
+       * <code>string timestamp = 2;</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;
+        }
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <code>string timestamp = 2;</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;
+      }
+
+      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) {
+        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.Kpi)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
+    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+    }
+
+    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Kpi>
+        PARSER = new com.google.protobuf.AbstractParser<Kpi>() {
+      @java.lang.Override
+      public Kpi parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Kpi(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Kpi> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Kpi> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiValueRangeOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValueRange)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
+     */
+    boolean hasKpiMinValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiMinValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder();
+
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
+     */
+    boolean hasKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
+     */
+    monitoring.Monitoring.KpiValue getKpiMaxValue();
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiValueRange}
+   */
+  public static final class KpiValueRange extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValueRange)
+      KpiValueRangeOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiValueRange.newBuilder() to construct.
+    private KpiValueRange(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiValueRange() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiValueRange();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiValueRange(
+        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.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();
+              }
+
+              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();
+              }
+
+              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_KpiValueRange_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+    }
+
+    public static final int KPIMINVALUE_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.KpiValue kpiMinValue_;
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return Whether the kpiMinValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiMinValue() {
+      return kpiMinValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     * @return The kpiMinValue.
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getKpiMinValue() {
+      return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+      return getKpiMinValue();
+    }
+
+    public static final int KPIMAXVALUE_FIELD_NUMBER = 2;
+    private monitoring.Monitoring.KpiValue kpiMaxValue_;
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return Whether the kpiMaxValue field is set.
+     */
+    @java.lang.Override
+    public boolean hasKpiMaxValue() {
+      return kpiMaxValue_ != null;
+    }
+    /**
+     * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+     * @return The kpiMaxValue.
+     */
+    @java.lang.Override
+    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();
+    }
+
+    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 (kpiMinValue_ != null) {
+        output.writeMessage(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        output.writeMessage(2, getKpiMaxValue());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (kpiMinValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getKpiMinValue());
+      }
+      if (kpiMaxValue_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getKpiMaxValue());
+      }
+      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.KpiValueRange)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiValueRange other = (monitoring.Monitoring.KpiValueRange) 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 (!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 (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();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiValueRange parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiValueRange parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiValueRange parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiValueRange parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.KpiValueRange parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.KpiValueRange parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValueRange 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.KpiValueRange 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.KpiValueRange}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_KpiValueRange_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiValueRange.class, monitoring.Monitoring.KpiValueRange.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiValueRange.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 (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
+        } else {
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+        } else {
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiValueRange_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiValueRange.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValueRange build() {
+        monitoring.Monitoring.KpiValueRange result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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();
+        }
+        if (kpiMaxValueBuilder_ == null) {
+          result.kpiMaxValue_ = kpiMaxValue_;
+        } else {
+          result.kpiMaxValue_ = kpiMaxValueBuilder_.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.KpiValueRange) {
+          return mergeFrom((monitoring.Monitoring.KpiValueRange)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());
+        }
+        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.KpiValueRange parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiValueRange) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        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.
+       */
+      public boolean hasKpiMinValue() {
+        return kpiMinValueBuilder_ != null || kpiMinValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       * @return The kpiMinValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          return kpiMinValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+        } else {
+          return kpiMinValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder setKpiMinValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMinValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiMinValue_ = value;
+          onChanged();
+        } else {
+          kpiMinValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder setKpiMinValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiMinValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      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;
+          }
+          onChanged();
+        } else {
+          kpiMinValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public Builder clearKpiMinValue() {
+        if (kpiMinValueBuilder_ == null) {
+          kpiMinValue_ = null;
+          onChanged();
+        } else {
+          kpiMinValue_ = null;
+          kpiMinValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiMinValueBuilder() {
+        
+        onChanged();
+        return getKpiMinValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMinValueOrBuilder() {
+        if (kpiMinValueBuilder_ != null) {
+          return kpiMinValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiMinValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMinValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMinValue = 1;</code>
+       */
+      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 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.
+       */
+      public boolean hasKpiMaxValue() {
+        return kpiMaxValueBuilder_ != null || kpiMaxValue_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       * @return The kpiMaxValue.
+       */
+      public monitoring.Monitoring.KpiValue getKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          return kpiMaxValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+        } else {
+          return kpiMaxValueBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder setKpiMaxValue(monitoring.Monitoring.KpiValue value) {
+        if (kpiMaxValueBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiMaxValue_ = value;
+          onChanged();
+        } else {
+          kpiMaxValueBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder setKpiMaxValue(
+          monitoring.Monitoring.KpiValue.Builder builderForValue) {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiMaxValueBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      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;
+          }
+          onChanged();
+        } else {
+          kpiMaxValueBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public Builder clearKpiMaxValue() {
+        if (kpiMaxValueBuilder_ == null) {
+          kpiMaxValue_ = null;
+          onChanged();
+        } else {
+          kpiMaxValue_ = null;
+          kpiMaxValueBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public monitoring.Monitoring.KpiValue.Builder getKpiMaxValueBuilder() {
+        
+        onChanged();
+        return getKpiMaxValueFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      public monitoring.Monitoring.KpiValueOrBuilder getKpiMaxValueOrBuilder() {
+        if (kpiMaxValueBuilder_ != null) {
+          return kpiMaxValueBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiMaxValue_ == null ?
+              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiMaxValue_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValue kpiMaxValue = 2;</code>
+       */
+      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;
+        }
+        return kpiMaxValueBuilder_;
+      }
+      @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.KpiValueRange)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValueRange)
+    private static final monitoring.Monitoring.KpiValueRange DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValueRange();
+    }
+
+    public static monitoring.Monitoring.KpiValueRange getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiValueRange>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValueRange>() {
+      @java.lang.Override
+      public KpiValueRange parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiValueRange(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiValueRange> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiValueRange> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValueRange getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiValueOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+      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.
+     */
+    boolean hasStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The stringVal.
+     */
+    java.lang.String getStringVal();
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    com.google.protobuf.ByteString
+        getStringValBytes();
+
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
+     */
+    boolean hasBoolVal();
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
+     */
+    boolean getBoolVal();
+
+    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiValue}
+   */
+  public static final class KpiValue extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
+      KpiValueOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiValue.newBuilder() to construct.
+    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiValue() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiValue();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiValue(
+        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 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();
+              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_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;
+    }
+    /**
+     * <code>uint32 intVal = 1;</code>
+     * @return The intVal.
+     */
+    @java.lang.Override
+    public int getIntVal() {
+      if (valueCase_ == 1) {
+        return (java.lang.Integer) value_;
+      }
+      return 0;
+    }
+
+    public static final int FLOATVAL_FIELD_NUMBER = 2;
+    /**
+     * <code>float floatVal = 2;</code>
+     * @return Whether the floatVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasFloatVal() {
+      return valueCase_ == 2;
+    }
+    /**
+     * <code>float floatVal = 2;</code>
+     * @return The floatVal.
+     */
+    @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;
+      }
+    }
+    /**
+     * <code>string stringVal = 3;</code>
+     * @return The bytes for stringVal.
+     */
+    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;
+      }
+    }
+
+    public static final int BOOLVAL_FIELD_NUMBER = 4;
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return Whether the boolVal field is set.
+     */
+    @java.lang.Override
+    public boolean hasBoolVal() {
+      return valueCase_ == 4;
+    }
+    /**
+     * <code>bool boolVal = 4;</code>
+     * @return The boolVal.
+     */
+    @java.lang.Override
+    public boolean getBoolVal() {
+      if (valueCase_ == 4) {
+        return (java.lang.Boolean) value_;
+      }
+      return false;
+    }
+
+    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 (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_));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      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) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(
+              4, (boolean)((java.lang.Boolean) value_));
+      }
+      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.KpiValue)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) 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 (!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();
+      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:
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.KpiValue parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiValue parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiValue parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiValue parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.KpiValue parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.KpiValue parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiValue 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.KpiValue 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.KpiValue}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_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);
+      }
+
+      // Construct using monitoring.Monitoring.KpiValue.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();
+        valueCase_ = 0;
+        value_ = null;
+        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();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiValue build() {
+        monitoring.Monitoring.KpiValue result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        }
+        if (valueCase_ == 4) {
+          result.value_ = value_;
+        }
+        result.valueCase_ = valueCase_;
+        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.KpiValue) {
+          return mergeFrom((monitoring.Monitoring.KpiValue)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_;
+            onChanged();
+            break;
+          }
+          case BOOLVAL: {
+            setBoolVal(other.getBoolVal());
+            break;
+          }
+          case VALUE_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 {
+        monitoring.Monitoring.KpiValue parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        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;
+      }
+
+
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @return Whether the intVal field is set.
+       */
+      public boolean hasIntVal() {
+        return valueCase_ == 1;
+      }
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @return The intVal.
+       */
+      public int getIntVal() {
+        if (valueCase_ == 1) {
+          return (java.lang.Integer) value_;
+        }
+        return 0;
+      }
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @param value The intVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIntVal(int value) {
+        valueCase_ = 1;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 intVal = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIntVal() {
+        if (valueCase_ == 1) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        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.
+       */
+      public float getFloatVal() {
+        if (valueCase_ == 2) {
+          return (java.lang.Float) value_;
+        }
+        return 0F;
+      }
+      /**
+       * <code>float floatVal = 2;</code>
+       * @param value The floatVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setFloatVal(float value) {
+        valueCase_ = 2;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>float floatVal = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearFloatVal() {
+        if (valueCase_ == 2) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        return this;
+      }
+
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return Whether the stringVal field is set.
+       */
+      @java.lang.Override
+      public boolean hasStringVal() {
+        return valueCase_ == 3;
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return The stringVal.
+       */
+      @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;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return The bytes for stringVal.
+       */
+      @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;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string stringVal = 3;</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_ = 3;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearStringVal() {
+        if (valueCase_ == 3) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        return this;
+      }
+      /**
+       * <code>string stringVal = 3;</code>
+       * @param value The bytes for stringVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setStringValBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        valueCase_ = 3;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @return Whether the boolVal field is set.
+       */
+      public boolean hasBoolVal() {
+        return valueCase_ == 4;
+      }
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @return The boolVal.
+       */
+      public boolean getBoolVal() {
+        if (valueCase_ == 4) {
+          return (java.lang.Boolean) value_;
+        }
+        return false;
+      }
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @param value The boolVal to set.
+       * @return This builder for chaining.
+       */
+      public Builder setBoolVal(boolean value) {
+        valueCase_ = 4;
+        value_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool boolVal = 4;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearBoolVal() {
+        if (valueCase_ == 4) {
+          valueCase_ = 0;
+          value_ = null;
+          onChanged();
+        }
+        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);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
+    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+    }
+
+    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiValue>
+        PARSER = new com.google.protobuf.AbstractParser<KpiValue>() {
+      @java.lang.Override
+      public KpiValue parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiValue(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiValue> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.Kpi> 
+        getKpiListList();
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    monitoring.Monitoring.Kpi getKpiList(int index);
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    int getKpiListCount();
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiList}
+   */
+  public static final class KpiList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
+      KpiListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiList.newBuilder() to construct.
+    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiList() {
+      kpiList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private KpiList(
+        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)) {
+                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.Kpi.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)) {
+          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_KpiList_descriptor;
+    }
+
+    @java.lang.Override
+    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 KPI_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+        getKpiListOrBuilderList() {
+      return kpiList_;
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getKpiListCount() {
+      return kpiList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.Kpi getKpiList(int index) {
+      return kpiList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+        int index) {
+      return kpiList_.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 < kpiList_.size(); i++) {
+        output.writeMessage(1, kpiList_.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 < kpiList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, kpiList_.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 monitoring.Monitoring.KpiList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+
+      if (!getKpiListList()
+          .equals(other.getKpiListList())) 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 (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.KpiList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.KpiList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.KpiList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiList 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.KpiList 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.KpiList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_KpiList_descriptor;
+      }
+
+      @java.lang.Override
+      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);
+      }
+
+      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        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_KpiList_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiList build() {
+        monitoring.Monitoring.KpiList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        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();
+        }
+        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.KpiList) {
+          return mergeFrom((monitoring.Monitoring.KpiList)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_;
+              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;
+      }
+
+      @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.KpiList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      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>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
+        if (kpiListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        } else {
+          return kpiListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public int getKpiListCount() {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.size();
+        } else {
+          return kpiListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi getKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);
+        } else {
+          return kpiListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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 this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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 {
+          kpiListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+          int index) {
+        return getKpiListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+          int index) {
+        if (kpiListBuilder_ == null) {
+          return kpiList_.get(index);  } else {
+          return kpiListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
+           getKpiListOrBuilderList() {
+        if (kpiListBuilder_ != null) {
+          return kpiListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
+        return getKpiListFieldBuilder().addBuilder(
+            monitoring.Monitoring.Kpi.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       */
+      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 kpiListBuilder_;
+      }
+      @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.KpiList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
+    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+    }
+
+    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiList>() {
+      @java.lang.Override
+      public KpiList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new KpiList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<KpiList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<KpiList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface KpiDescriptorListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.KpiDescriptorList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.KpiDescriptor> 
+        getKpiDescriptorListList();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index);
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    int getKpiDescriptorListCount();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.KpiDescriptorList}
+   */
+  public static final class KpiDescriptorList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.KpiDescriptorList)
+      KpiDescriptorListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use KpiDescriptorList.newBuilder() to construct.
+    private KpiDescriptorList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private KpiDescriptorList() {
+      kpiDescriptorList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new KpiDescriptorList();
+    }
+
+    @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;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                kpiDescriptorList_ = new java.util.ArrayList<monitoring.Monitoring.KpiDescriptor>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiDescriptorList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiDescriptor.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)) {
+          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;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+    }
+
+    public static final int KPI_DESCRIPTOR_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.KpiDescriptor> kpiDescriptorList_;
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+      return kpiDescriptorList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+        getKpiDescriptorListOrBuilderList() {
+      return kpiDescriptorList_;
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getKpiDescriptorListCount() {
+      return kpiDescriptorList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+      return kpiDescriptorList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+        int index) {
+      return kpiDescriptorList_.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 < kpiDescriptorList_.size(); i++) {
+        output.writeMessage(1, kpiDescriptorList_.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 < kpiDescriptorList_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, kpiDescriptorList_.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 monitoring.Monitoring.KpiDescriptorList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.KpiDescriptorList other = (monitoring.Monitoring.KpiDescriptorList) obj;
+
+      if (!getKpiDescriptorListList()
+          .equals(other.getKpiDescriptorListList())) 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 (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.KpiDescriptorList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiDescriptorList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiDescriptorList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.KpiDescriptorList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.KpiDescriptorList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.KpiDescriptorList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.KpiDescriptorList 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.KpiDescriptorList 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.KpiDescriptorList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_KpiDescriptorList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.KpiDescriptorList.class, monitoring.Monitoring.KpiDescriptorList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.KpiDescriptorList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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);
+        } else {
+          kpiDescriptorListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_KpiDescriptorList_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptorList getDefaultInstanceForType() {
+        return monitoring.Monitoring.KpiDescriptorList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.KpiDescriptorList build() {
+        monitoring.Monitoring.KpiDescriptorList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        } else {
+          result.kpiDescriptorList_ = kpiDescriptorListBuilder_.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.KpiDescriptorList) {
+          return mergeFrom((monitoring.Monitoring.KpiDescriptorList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      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();
+          }
+        } 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_);
+            }
+          }
+        }
+        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.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);
+          }
+        }
+        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;
+         }
+      }
+
+      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>
+       */
+      public java.util.List<monitoring.Monitoring.KpiDescriptor> getKpiDescriptorListList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        } else {
+          return kpiDescriptorListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public int getKpiDescriptorListCount() {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.size();
+        } else {
+          return kpiDescriptorListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor getKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);
+        } else {
+          return kpiDescriptorListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder setKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor value) {
+        if (kpiDescriptorListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, value);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder addKpiDescriptorList(
+          int index, monitoring.Monitoring.KpiDescriptor.Builder builderForValue) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</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);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder clearKpiDescriptorList() {
+        if (kpiDescriptorListBuilder_ == null) {
+          kpiDescriptorList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public Builder removeKpiDescriptorList(int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          ensureKpiDescriptorListIsMutable();
+          kpiDescriptorList_.remove(index);
+          onChanged();
+        } else {
+          kpiDescriptorListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder getKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptorOrBuilder getKpiDescriptorListOrBuilder(
+          int index) {
+        if (kpiDescriptorListBuilder_ == null) {
+          return kpiDescriptorList_.get(index);  } else {
+          return kpiDescriptorListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.KpiDescriptorOrBuilder> 
+           getKpiDescriptorListOrBuilderList() {
+        if (kpiDescriptorListBuilder_ != null) {
+          return kpiDescriptorListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(kpiDescriptorList_);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder() {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</code>
+       */
+      public monitoring.Monitoring.KpiDescriptor.Builder addKpiDescriptorListBuilder(
+          int index) {
+        return getKpiDescriptorListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.KpiDescriptor.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .monitoring.KpiDescriptor kpi_descriptor_list = 1;</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),
+                  getParentForChildren(),
+                  isClean());
+          kpiDescriptorList_ = null;
+        }
+        return kpiDescriptorListBuilder_;
+      }
+      @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.KpiDescriptorList)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.KpiDescriptorList)
+    private static final monitoring.Monitoring.KpiDescriptorList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiDescriptorList();
+    }
+
+    public static monitoring.Monitoring.KpiDescriptorList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<KpiDescriptorList>
+        PARSER = new com.google.protobuf.AbstractParser<KpiDescriptorList>() {
+      @java.lang.Override
+      public KpiDescriptorList 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();
+
+    /**
+     * <code>float sampling_duration_s = 2;</code>
+     * @return The samplingDurationS.
+     */
+    float getSamplingDurationS();
+
+    /**
+     * <code>float sampling_interval_s = 3;</code>
+     * @return The samplingIntervalS.
+     */
+    float getSamplingIntervalS();
+
+    /**
+     * <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.
+     */
+    com.google.protobuf.ByteString
+        getStartDateBytes();
+
+    /**
+     * <pre>
+     * used when you want something like "get the samples until X date/time"
+     * </pre>
+     *
+     * <code>string end_date = 5;</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 = 5;</code>
+     * @return The bytes for endDate.
+     */
+    com.google.protobuf.ByteString
+        getEndDateBytes();
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsDescriptor}
+   */
+  public static final class SubsDescriptor extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsDescriptor)
+      SubsDescriptorOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsDescriptor.newBuilder() to construct.
+    private SubsDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsDescriptor() {
+      startDate_ = "";
+      endDate_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      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.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: {
+
+              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)) {
+                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_SubsDescriptor_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_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_;
+    }
+
+    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;
+      }
+    }
+    /**
+     * <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.
+     */
+    @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 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.
+     */
+    @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 = 5;</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;
+      }
+    }
+
+    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 (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_);
+      }
+      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 (samplingDurationS_ != 0F) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeFloatSize(2, samplingDurationS_);
+      }
+      if (samplingIntervalS_ != 0F) {
+        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_);
+      }
+      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.SubsDescriptor)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubsDescriptor other = (monitoring.Monitoring.SubsDescriptor) obj;
+
+      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 (!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;
+      }
+      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) + 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(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsDescriptor parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsDescriptor parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsDescriptor parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.SubsDescriptor parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.SubsDescriptor parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsDescriptor 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.SubsDescriptor 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.SubsDescriptor}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_SubsDescriptor_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsDescriptor_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsDescriptor.class, monitoring.Monitoring.SubsDescriptor.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsDescriptor.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;
+        }
+        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;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsDescriptor.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor build() {
+        monitoring.Monitoring.SubsDescriptor result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsDescriptor buildPartial() {
+        monitoring.Monitoring.SubsDescriptor result = new monitoring.Monitoring.SubsDescriptor(this);
+        if (kpiIdBuilder_ == null) {
+          result.kpiId_ = kpiId_;
+        } else {
+          result.kpiId_ = kpiIdBuilder_.build();
+        }
+        result.samplingDurationS_ = samplingDurationS_;
+        result.samplingIntervalS_ = samplingIntervalS_;
+        result.startDate_ = startDate_;
+        result.endDate_ = endDate_;
+        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.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);
+          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 float samplingDurationS_ ;
+      /**
+       * <code>float sampling_duration_s = 2;</code>
+       * @return The samplingDurationS.
+       */
+      @java.lang.Override
+      public float getSamplingDurationS() {
+        return samplingDurationS_;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <code>float sampling_duration_s = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingDurationS() {
+        
+        samplingDurationS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      private float samplingIntervalS_ ;
+      /**
+       * <code>float sampling_interval_s = 3;</code>
+       * @return The samplingIntervalS.
+       */
+      @java.lang.Override
+      public float getSamplingIntervalS() {
+        return samplingIntervalS_;
+      }
+      /**
+       * <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();
+        return this;
+      }
+      /**
+       * <code>float sampling_interval_s = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearSamplingIntervalS() {
+        
+        samplingIntervalS_ = 0F;
+        onChanged();
+        return this;
+      }
+
+      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.
+       */
+      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;
+        }
+      }
+      /**
+       * <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.
+       */
+      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;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <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.
+       */
+      public Builder setStartDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        startDate_ = value;
+        onChanged();
+        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.
+       */
+      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;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <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.
+       */
+      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;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <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.
+       */
+      public Builder setEndDate(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endDate_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <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.
+       */
+      public Builder clearEndDate() {
+        
+        endDate_ = getDefaultInstance().getEndDate();
+        onChanged();
+        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 bytes for endDate to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndDateBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endDate_ = value;
+        onChanged();
+        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);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsDescriptor)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsDescriptor)
+    private static final monitoring.Monitoring.SubsDescriptor DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsDescriptor();
+    }
+
+    public static monitoring.Monitoring.SubsDescriptor getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<SubsDescriptor>() {
+      @java.lang.Override
+      public SubsDescriptor parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsDescriptor(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsDescriptor> parser() {
+      return PARSER;
+    }
+
+    @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 {
+
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
+     */
+    boolean hasSubsId();
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
+     */
+    context.ContextOuterClass.Uuid getSubsId();
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code monitoring.SubscriptionID}
+   */
+  public static final class SubscriptionID extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubscriptionID)
+      SubscriptionIDOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubscriptionID.newBuilder() to construct.
+    private SubscriptionID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubscriptionID() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubscriptionID();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubscriptionID(
+        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 (subsId_ != null) {
+                subBuilder = subsId_.toBuilder();
+              }
+              subsId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(subsId_);
+                subsId_ = 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 monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+    }
+
+    public static final int SUBS_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid subsId_;
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return Whether the subsId field is set.
+     */
+    @java.lang.Override
+    public boolean hasSubsId() {
+      return subsId_ != null;
+    }
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     * @return The subsId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getSubsId() {
+      return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+    }
+    /**
+     * <code>.context.Uuid subs_id = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+      return getSubsId();
+    }
+
+    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 (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (subsId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getSubsId());
+      }
+      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.SubscriptionID)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubscriptionID other = (monitoring.Monitoring.SubscriptionID) obj;
+
+      if (hasSubsId() != other.hasSubsId()) return false;
+      if (hasSubsId()) {
+        if (!getSubsId()
+            .equals(other.getSubsId())) 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 (hasSubsId()) {
+        hash = (37 * hash) + SUBS_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getSubsId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubscriptionID parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubscriptionID parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubscriptionID parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubscriptionID parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.SubscriptionID parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.SubscriptionID parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubscriptionID 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.SubscriptionID 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.SubscriptionID}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_SubscriptionID_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubscriptionID.class, monitoring.Monitoring.SubscriptionID.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubscriptionID.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 (subsIdBuilder_ == null) {
+          subsId_ = null;
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubscriptionID_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubscriptionID getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubscriptionID.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubscriptionID build() {
+        monitoring.Monitoring.SubscriptionID result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubscriptionID buildPartial() {
+        monitoring.Monitoring.SubscriptionID result = new monitoring.Monitoring.SubscriptionID(this);
+        if (subsIdBuilder_ == null) {
+          result.subsId_ = subsId_;
+        } else {
+          result.subsId_ = subsIdBuilder_.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.SubscriptionID) {
+          return mergeFrom((monitoring.Monitoring.SubscriptionID)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      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;
+      }
+
+      @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.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>.context.Uuid subs_id = 1;</code>
+       * @return Whether the subsId field is set.
+       */
+      public boolean hasSubsId() {
+        return subsIdBuilder_ != null || subsId_ != null;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       * @return The subsId.
+       */
+      public context.ContextOuterClass.Uuid getSubsId() {
+        if (subsIdBuilder_ == null) {
+          return subsId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        } else {
+          return subsIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder setSubsId(context.ContextOuterClass.Uuid value) {
+        if (subsIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          subsId_ = value;
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder setSubsId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (subsIdBuilder_ == null) {
+          subsId_ = builderForValue.build();
+          onChanged();
+        } else {
+          subsIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</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;
+          }
+          onChanged();
+        } else {
+          subsIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public Builder clearSubsId() {
+        if (subsIdBuilder_ == null) {
+          subsId_ = null;
+          onChanged();
+        } else {
+          subsId_ = null;
+          subsIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getSubsIdBuilder() {
+        
+        onChanged();
+        return getSubsIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getSubsIdOrBuilder() {
+        if (subsIdBuilder_ != null) {
+          return subsIdBuilder_.getMessageOrBuilder();
+        } else {
+          return subsId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : subsId_;
+        }
+      }
+      /**
+       * <code>.context.Uuid subs_id = 1;</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(),
+                  getParentForChildren(),
+                  isClean());
+          subsId_ = null;
+        }
+        return subsIdBuilder_;
+      }
+      @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.SubscriptionID)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubscriptionID)
+    private static final monitoring.Monitoring.SubscriptionID DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubscriptionID();
+    }
+
+    public static monitoring.Monitoring.SubscriptionID getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubscriptionID>
+        PARSER = new com.google.protobuf.AbstractParser<SubscriptionID>() {
+      @java.lang.Override
+      public SubscriptionID parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubscriptionID(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubscriptionID> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubscriptionID> 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();
+
+    /**
+     * <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.SubsResponse}
+   */
+  public static final class SubsResponse extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsResponse)
+      SubsResponseOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsResponse.newBuilder() to construct.
+    private SubsResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsResponse() {
+      kpiList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsResponse();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsResponse(
+        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: {
+              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>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              kpiList_.add(
+                  input.readMessage(monitoring.Monitoring.KpiList.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)) {
+          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_SubsResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsResponse_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();
+    }
+
+    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() {
+      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 (subsId_ != null) {
+        output.writeMessage(1, getSubsId());
+      }
+      for (int i = 0; i < kpiList_.size(); i++) {
+        output.writeMessage(2, kpiList_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      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++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, kpiList_.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 monitoring.Monitoring.SubsResponse)) {
+        return super.equals(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;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      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();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static monitoring.Monitoring.SubsResponse parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsResponse parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsResponse parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsResponse parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.SubsResponse parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.SubsResponse parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsResponse 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.SubsResponse 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.SubsResponse}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_SubsResponse_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsResponse.class, monitoring.Monitoring.SubsResponse.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsResponse.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getKpiListFieldBuilder();
+        }
+      }
+      @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();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsResponse_descriptor;
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.SubsResponse.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public monitoring.Monitoring.SubsResponse build() {
+        monitoring.Monitoring.SubsResponse 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) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.kpiList_ = kpiList_;
+        } else {
+          result.kpiList_ = kpiListBuilder_.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.SubsResponse) {
+          return mergeFrom((monitoring.Monitoring.SubsResponse)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_;
+              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;
+      }
+
+      @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.SubsResponse parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (monitoring.Monitoring.SubsResponse) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      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>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      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>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList value) {
+        if (kpiListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureKpiListIsMutable();
+          kpiList_.add(index, value);
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(
+          monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder addKpiList(
+          int index, monitoring.Monitoring.KpiList.Builder builderForValue) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          kpiListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      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 {
+          kpiListBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder clearKpiList() {
+        if (kpiListBuilder_ == null) {
+          kpiList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          kpiListBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      public Builder removeKpiList(int index) {
+        if (kpiListBuilder_ == null) {
+          ensureKpiListIsMutable();
+          kpiList_.remove(index);
+          onChanged();
+        } else {
+          kpiListBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .monitoring.KpiList kpi_list = 2;</code>
+       */
+      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());
+          kpiList_ = null;
+        }
+        return kpiListBuilder_;
+      }
+      @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.SubsResponse)
+    }
+
+    // @@protoc_insertion_point(class_scope:monitoring.SubsResponse)
+    private static final monitoring.Monitoring.SubsResponse DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsResponse();
+    }
+
+    public static monitoring.Monitoring.SubsResponse getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<SubsResponse>
+        PARSER = new com.google.protobuf.AbstractParser<SubsResponse>() {
+      @java.lang.Override
+      public SubsResponse parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new SubsResponse(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<SubsResponse> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<SubsResponse> getParserForType() {
+      return PARSER;
+    }
+
+    @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.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<monitoring.Monitoring.SubscriptionID> 
+        getSubsListList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionID getSubsList(int index);
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    int getSubsListCount();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList();
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code monitoring.SubsIDList}
+   */
+  public static final class SubsIDList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:monitoring.SubsIDList)
+      SubsIDListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use SubsIDList.newBuilder() to construct.
+    private SubsIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private SubsIDList() {
+      subsList_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new SubsIDList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private SubsIDList(
+        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)) {
+                subsList_ = new java.util.ArrayList<monitoring.Monitoring.SubscriptionID>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              subsList_.add(
+                  input.readMessage(monitoring.Monitoring.SubscriptionID.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)) {
+          subsList_ = java.util.Collections.unmodifiableList(subsList_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+    }
+
+    public static final int SUBS_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.SubscriptionID> subsList_;
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<monitoring.Monitoring.SubscriptionID> getSubsListList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+        getSubsListOrBuilderList() {
+      return subsList_;
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public int getSubsListCount() {
+      return subsList_.size();
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+      return subsList_.get(index);
+    }
+    /**
+     * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+     */
+    @java.lang.Override
+    public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+        int index) {
+      return subsList_.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 < subsList_.size(); i++) {
+        output.writeMessage(1, subsList_.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++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, subsList_.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 monitoring.Monitoring.SubsIDList)) {
+        return super.equals(obj);
+      }
+      monitoring.Monitoring.SubsIDList other = (monitoring.Monitoring.SubsIDList) obj;
+
+      if (!getSubsListList()
+          .equals(other.getSubsListList())) 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 (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.SubsIDList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsIDList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsIDList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.SubsIDList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.SubsIDList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.SubsIDList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static monitoring.Monitoring.SubsIDList 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.SubsIDList 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.SubsIDList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_SubsIDList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return monitoring.Monitoring.internal_static_monitoring_SubsIDList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                monitoring.Monitoring.SubsIDList.class, monitoring.Monitoring.SubsIDList.Builder.class);
+      }
+
+      // Construct using monitoring.Monitoring.SubsIDList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getSubsListFieldBuilder();
+        }
+      }
+      @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_);
+        } else {
+          return subsListBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public int getSubsListCount() {
+        if (subsListBuilder_ == null) {
+          return subsList_.size();
+        } else {
+          return subsListBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public monitoring.Monitoring.SubscriptionID getSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);
+        } else {
+          return subsListBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <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();
+        } else {
+          subsListBuilder_.setMessage(index, value);
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearKpiId() {
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
+      public Builder setSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
+          subsListBuilder_.setMessage(index, builderForValue.build());
         }
-
         return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
-        
-        onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+      public Builder addSubsList(monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubsListIsMutable();
+          subsList_.add(value);
+          onChanged();
+        } else {
+          subsListBuilder_.addMessage(value);
+        }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiIdOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID value) {
+        if (subsListBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureSubsListIsMutable();
+          subsList_.add(index, value);
+          onChanged();
         } else {
-          return kpiId_ == null ?
-              monitoring.Monitoring.KpiId.getDefaultInstance() : kpiId_;
+          subsListBuilder_.addMessage(index, value);
         }
+        return this;
       }
       /**
-       * <code>.monitoring.KpiId kpi_id = 1;</code>
+       * <code>repeated .monitoring.SubscriptionID subs_list = 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;
+      public Builder addSubsList(
+          monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(builderForValue.build());
+          onChanged();
+        } else {
+          subsListBuilder_.addMessage(builderForValue.build());
         }
-        return kpiIdBuilder_;
+        return this;
       }
-
-      private float samplingDurationS_ ;
       /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @return The samplingDurationS.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      @java.lang.Override
-      public float getSamplingDurationS() {
-        return samplingDurationS_;
+      public Builder addSubsList(
+          int index, monitoring.Monitoring.SubscriptionID.Builder builderForValue) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          subsListBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
       }
       /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @param value The samplingDurationS to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setSamplingDurationS(float value) {
-        
-        samplingDurationS_ = value;
-        onChanged();
+      public Builder addAllSubsList(
+          java.lang.Iterable<? extends monitoring.Monitoring.SubscriptionID> values) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, subsList_);
+          onChanged();
+        } else {
+          subsListBuilder_.addAllMessages(values);
+        }
         return this;
       }
       /**
-       * <code>float sampling_duration_s = 2;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearSamplingDurationS() {
-        
-        samplingDurationS_ = 0F;
-        onChanged();
+      public Builder clearSubsList() {
+        if (subsListBuilder_ == null) {
+          subsList_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          subsListBuilder_.clear();
+        }
         return this;
       }
-
-      private float samplingIntervalS_ ;
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @return The samplingIntervalS.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      @java.lang.Override
-      public float getSamplingIntervalS() {
-        return samplingIntervalS_;
+      public Builder removeSubsList(int index) {
+        if (subsListBuilder_ == null) {
+          ensureSubsListIsMutable();
+          subsList_.remove(index);
+          onChanged();
+        } else {
+          subsListBuilder_.remove(index);
+        }
+        return this;
       }
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @param value The samplingIntervalS to set.
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder setSamplingIntervalS(float value) {
-        
-        samplingIntervalS_ = value;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.SubscriptionID.Builder getSubsListBuilder(
+          int index) {
+        return getSubsListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>float sampling_interval_s = 3;</code>
-       * @return This builder for chaining.
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
        */
-      public Builder clearSamplingIntervalS() {
-        
-        samplingIntervalS_ = 0F;
-        onChanged();
-        return this;
+      public monitoring.Monitoring.SubscriptionIDOrBuilder getSubsListOrBuilder(
+          int index) {
+        if (subsListBuilder_ == null) {
+          return subsList_.get(index);  } else {
+          return subsListBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .monitoring.SubscriptionID subs_list = 1;</code>
+       */
+      public java.util.List<? extends monitoring.Monitoring.SubscriptionIDOrBuilder> 
+           getSubsListOrBuilderList() {
+        if (subsListBuilder_ != null) {
+          return subsListBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(subsList_);
+        }
+      }
+      /**
+       * <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;
+        }
+        return subsListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -2083,85 +16125,139 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.MonitorKpiRequest)
+      // @@protoc_insertion_point(builder_scope:monitoring.SubsIDList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.MonitorKpiRequest)
-    private static final monitoring.Monitoring.MonitorKpiRequest DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.SubsIDList)
+    private static final monitoring.Monitoring.SubsIDList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.MonitorKpiRequest();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.SubsIDList();
     }
 
-    public static monitoring.Monitoring.MonitorKpiRequest getDefaultInstance() {
+    public static monitoring.Monitoring.SubsIDList getDefaultInstance() {
       return DEFAULT_INSTANCE;
     }
 
-    private static final com.google.protobuf.Parser<MonitorKpiRequest>
-        PARSER = new com.google.protobuf.AbstractParser<MonitorKpiRequest>() {
+    private static final com.google.protobuf.Parser<SubsIDList>
+        PARSER = new com.google.protobuf.AbstractParser<SubsIDList>() {
       @java.lang.Override
-      public MonitorKpiRequest parsePartialFrom(
+      public SubsIDList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new MonitorKpiRequest(input, extensionRegistry);
+        return new SubsIDList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<MonitorKpiRequest> parser() {
+    public static com.google.protobuf.Parser<SubsIDList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<MonitorKpiRequest> getParserForType() {
+    public com.google.protobuf.Parser<SubsIDList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.MonitorKpiRequest getDefaultInstanceForType() {
+    public monitoring.Monitoring.SubsIDList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiIdOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiId)
+  public interface AlarmDescriptorOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmDescriptor)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <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>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      * @return The kpiId.
      */
-    context.ContextOuterClass.Uuid getKpiId();
+    monitoring.Monitoring.KpiId getKpiId();
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      */
-    context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder();
+    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.KpiId}
+   * Protobuf type {@code monitoring.AlarmDescriptor}
    */
-  public static final class KpiId extends
+  public static final class AlarmDescriptor extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiId)
-      KpiIdOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmDescriptor)
+      AlarmDescriptorOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiId.newBuilder() to construct.
-    private KpiId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmDescriptor.newBuilder() to construct.
+    private AlarmDescriptor(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiId() {
+    private AlarmDescriptor() {
+      alarmDescription_ = "";
+      name_ = "";
+      timestamp_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiId();
+      return new AlarmDescriptor();
     }
 
     @java.lang.Override
@@ -2169,7 +16265,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiId(
+    private AlarmDescriptor(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2188,11 +16284,23 @@ public final class Monitoring {
               done = true;
               break;
             case 10: {
-              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              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(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              kpiId_ = input.readMessage(monitoring.Monitoring.KpiId.parser(), extensionRegistry);
               if (subBuilder != null) {
                 subBuilder.mergeFrom(kpiId_);
                 kpiId_ = subBuilder.buildPartial();
@@ -2200,6 +16308,25 @@ public final class Monitoring {
 
               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();
+              }
+
+              break;
+            }
+            case 42: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              timestamp_ = s;
+              break;
+            }
             default: {
               if (!parseUnknownField(
                   input, unknownFields, extensionRegistry, tag)) {
@@ -2219,23 +16346,99 @@ public final class Monitoring {
         makeExtensionsImmutable();
       }
     }
-    public static final com.google.protobuf.Descriptors.Descriptor
-        getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiId_descriptor;
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_descriptor;
+    }
+
+    @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);
+    }
+
+    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;
+      }
+    }
+    /**
+     * <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;
+      }
     }
 
+    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
-    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 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 = 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;
+      }
     }
 
-    public static final int KPI_ID_FIELD_NUMBER = 1;
-    private context.ContextOuterClass.Uuid kpiId_;
+    public static final int KPI_ID_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiId kpiId_;
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</code>
      * @return Whether the kpiId field is set.
      */
     @java.lang.Override
@@ -2243,21 +16446,85 @@ public final class Monitoring {
       return kpiId_ != null;
     }
     /**
-     * <code>.context.Uuid kpi_id = 1;</code>
+     * <code>.monitoring.KpiId kpi_id = 3;</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 = 3;</code>
      */
     @java.lang.Override
-    public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
+    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 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;
+      }
+    }
+
     private byte memoizedIsInitialized = -1;
     @java.lang.Override
     public final boolean isInitialized() {
@@ -2272,8 +16539,20 @@ public final class Monitoring {
     @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_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+      }
       if (kpiId_ != null) {
-        output.writeMessage(1, getKpiId());
+        output.writeMessage(3, getKpiId());
+      }
+      if (kpiValueRange_ != null) {
+        output.writeMessage(4, getKpiValueRange());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, timestamp_);
       }
       unknownFields.writeTo(output);
     }
@@ -2284,9 +16563,22 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
+      if (!getAlarmDescriptionBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, alarmDescription_);
+      }
+      if (!getNameBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+      }
       if (kpiId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
+          .computeMessageSize(3, getKpiId());
+      }
+      if (kpiValueRange_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(4, getKpiValueRange());
+      }
+      if (!getTimestampBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, timestamp_);
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -2298,16 +16590,27 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiId)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmDescriptor)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiId other = (monitoring.Monitoring.KpiId) obj;
+      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;
       }
+      if (hasKpiValueRange() != other.hasKpiValueRange()) return false;
+      if (hasKpiValueRange()) {
+        if (!getKpiValueRange()
+            .equals(other.getKpiValueRange())) return false;
+      }
+      if (!getTimestamp()
+          .equals(other.getTimestamp())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -2319,78 +16622,88 @@ public final class Monitoring {
       }
       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();
       }
+      if (hasKpiValueRange()) {
+        hash = (37 * hash) + KPI_VALUE_RANGE_FIELD_NUMBER;
+        hash = (53 * hash) + getKpiValueRange().hashCode();
+      }
+      hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
+      hash = (53 * hash) + getTimestamp().hashCode();
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId 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.KpiId 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.KpiId 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.KpiId parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiId 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.KpiId 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.KpiId 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.KpiId 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.KpiId 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.KpiId 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.KpiId parseFrom(
+    public static monitoring.Monitoring.AlarmDescriptor parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -2403,7 +16716,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.AlarmDescriptor prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -2419,26 +16732,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiId}
+     * Protobuf type {@code monitoring.AlarmDescriptor}
      */
     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.AlarmDescriptor)
+        monitoring.Monitoring.AlarmDescriptorOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiId_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_KpiId_fieldAccessorTable
+        return monitoring.Monitoring.internal_static_monitoring_AlarmDescriptor_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiId.class, monitoring.Monitoring.KpiId.Builder.class);
+                monitoring.Monitoring.AlarmDescriptor.class, monitoring.Monitoring.AlarmDescriptor.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiId.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmDescriptor.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -2456,29 +16769,41 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
+        alarmDescription_ = "";
+
+        name_ = "";
+
         if (kpiIdBuilder_ == null) {
           kpiId_ = null;
         } else {
           kpiId_ = null;
           kpiIdBuilder_ = null;
         }
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
+        } else {
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
+        }
+        timestamp_ = "";
+
         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_AlarmDescriptor_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiId.getDefaultInstance();
+      public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmDescriptor.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId build() {
-        monitoring.Monitoring.KpiId result = buildPartial();
+      public monitoring.Monitoring.AlarmDescriptor build() {
+        monitoring.Monitoring.AlarmDescriptor result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -2486,13 +16811,21 @@ public final class Monitoring {
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiId buildPartial() {
-        monitoring.Monitoring.KpiId result = new monitoring.Monitoring.KpiId(this);
+      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_;
         } else {
           result.kpiId_ = kpiIdBuilder_.build();
         }
+        if (kpiValueRangeBuilder_ == null) {
+          result.kpiValueRange_ = kpiValueRange_;
+        } else {
+          result.kpiValueRange_ = kpiValueRangeBuilder_.build();
+        }
+        result.timestamp_ = timestamp_;
         onBuilt();
         return result;
       }
@@ -2517,87 +16850,254 @@ public final class Monitoring {
           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 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 {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      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_;
+          onChanged();
+        }
+        if (other.hasKpiId()) {
+          mergeKpiId(other.getKpiId());
+        }
+        if (other.hasKpiValueRange()) {
+          mergeKpiValueRange(other.getKpiValueRange());
+        }
+        if (!other.getTimestamp().isEmpty()) {
+          timestamp_ = other.timestamp_;
+          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.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;
+      }
+
+      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;
+        }
+      }
+      /**
+       * <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;
+        }
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <code>string alarm_description = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAlarmDescription() {
+        
+        alarmDescription_ = getDefaultInstance().getAlarmDescription();
+        onChanged();
+        return this;
       }
-      @java.lang.Override
-      public Builder addRepeatedField(
-          com.google.protobuf.Descriptors.FieldDescriptor field,
-          java.lang.Object value) {
-        return super.addRepeatedField(field, value);
+      /**
+       * <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;
       }
-      @java.lang.Override
-      public Builder mergeFrom(com.google.protobuf.Message other) {
-        if (other instanceof monitoring.Monitoring.KpiId) {
-          return mergeFrom((monitoring.Monitoring.KpiId)other);
+
+      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 {
-          super.mergeFrom(other);
-          return this;
+          return (java.lang.String) ref;
         }
       }
-
-      public Builder mergeFrom(monitoring.Monitoring.KpiId other) {
-        if (other == monitoring.Monitoring.KpiId.getDefaultInstance()) return this;
-        if (other.hasKpiId()) {
-          mergeKpiId(other.getKpiId());
+      /**
+       * <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;
         }
-        this.mergeUnknownFields(other.unknownFields);
+      }
+      /**
+       * <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;
       }
-
-      @java.lang.Override
-      public final boolean isInitialized() {
-        return true;
+      /**
+       * <code>string name = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearName() {
+        
+        name_ = getDefaultInstance().getName();
+        onChanged();
+        return this;
       }
-
-      @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);
-          }
-        }
+      /**
+       * <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;
       }
 
-      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 = 3;</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 = 3;</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 = 3;</code>
        */
-      public Builder setKpiId(context.ContextOuterClass.Uuid value) {
+      public Builder setKpiId(monitoring.Monitoring.KpiId value) {
         if (kpiIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
@@ -2611,10 +17111,10 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        */
       public Builder setKpiId(
-          context.ContextOuterClass.Uuid.Builder builderForValue) {
+          monitoring.Monitoring.KpiId.Builder builderForValue) {
         if (kpiIdBuilder_ == null) {
           kpiId_ = builderForValue.build();
           onChanged();
@@ -2625,13 +17125,13 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</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;
           }
@@ -2643,7 +17143,7 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
        */
       public Builder clearKpiId() {
         if (kpiIdBuilder_ == null) {
@@ -2657,39 +17157,234 @@ public final class Monitoring {
         return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>.monitoring.KpiId kpi_id = 3;</code>
+       */
+      public monitoring.Monitoring.KpiId.Builder getKpiIdBuilder() {
+        
+        onChanged();
+        return getKpiIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiId kpi_id = 3;</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 = 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;
+        }
+        return kpiIdBuilder_;
+      }
+
+      private monitoring.Monitoring.KpiValueRange kpiValueRange_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValueRange, monitoring.Monitoring.KpiValueRange.Builder, monitoring.Monitoring.KpiValueRangeOrBuilder> kpiValueRangeBuilder_;
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return Whether the kpiValueRange field is set.
+       */
+      public boolean hasKpiValueRange() {
+        return kpiValueRangeBuilder_ != null || kpiValueRange_ != null;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       * @return The kpiValueRange.
+       */
+      public monitoring.Monitoring.KpiValueRange getKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          return kpiValueRange_ == null ? monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+        } else {
+          return kpiValueRangeBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder setKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          kpiValueRange_ = value;
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder setKpiValueRange(
+          monitoring.Monitoring.KpiValueRange.Builder builderForValue) {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = builderForValue.build();
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder mergeKpiValueRange(monitoring.Monitoring.KpiValueRange value) {
+        if (kpiValueRangeBuilder_ == null) {
+          if (kpiValueRange_ != null) {
+            kpiValueRange_ =
+              monitoring.Monitoring.KpiValueRange.newBuilder(kpiValueRange_).mergeFrom(value).buildPartial();
+          } else {
+            kpiValueRange_ = value;
+          }
+          onChanged();
+        } else {
+          kpiValueRangeBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public Builder clearKpiValueRange() {
+        if (kpiValueRangeBuilder_ == null) {
+          kpiValueRange_ = null;
+          onChanged();
+        } else {
+          kpiValueRange_ = null;
+          kpiValueRangeBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public monitoring.Monitoring.KpiValueRange.Builder getKpiValueRangeBuilder() {
+        
+        onChanged();
+        return getKpiValueRangeFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</code>
+       */
+      public monitoring.Monitoring.KpiValueRangeOrBuilder getKpiValueRangeOrBuilder() {
+        if (kpiValueRangeBuilder_ != null) {
+          return kpiValueRangeBuilder_.getMessageOrBuilder();
+        } else {
+          return kpiValueRange_ == null ?
+              monitoring.Monitoring.KpiValueRange.getDefaultInstance() : kpiValueRange_;
+        }
+      }
+      /**
+       * <code>.monitoring.KpiValueRange kpi_value_range = 4;</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(),
+                  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;
+        }
+      }
+      /**
+       * <code>string timestamp = 5;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.Uuid.Builder getKpiIdBuilder() {
-        
+      public Builder setTimestamp(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        timestamp_ = value;
         onChanged();
-        return getKpiIdFieldBuilder().getBuilder();
+        return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>string timestamp = 5;</code>
+       * @return This builder for chaining.
        */
-      public context.ContextOuterClass.UuidOrBuilder getKpiIdOrBuilder() {
-        if (kpiIdBuilder_ != null) {
-          return kpiIdBuilder_.getMessageOrBuilder();
-        } else {
-          return kpiId_ == null ?
-              context.ContextOuterClass.Uuid.getDefaultInstance() : kpiId_;
-        }
+      public Builder clearTimestamp() {
+        
+        timestamp_ = getDefaultInstance().getTimestamp();
+        onChanged();
+        return this;
       }
       /**
-       * <code>.context.Uuid kpi_id = 1;</code>
+       * <code>string timestamp = 5;</code>
+       * @param value The bytes for timestamp to set.
+       * @return This builder for chaining.
        */
-      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_;
+      public Builder setTimestampBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -2704,113 +17399,85 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiId)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmDescriptor)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiId)
-    private static final monitoring.Monitoring.KpiId DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmDescriptor)
+    private static final monitoring.Monitoring.AlarmDescriptor DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiId();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmDescriptor();
     }
 
-    public static monitoring.Monitoring.KpiId getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmDescriptor 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<AlarmDescriptor>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmDescriptor>() {
       @java.lang.Override
-      public KpiId parsePartialFrom(
+      public AlarmDescriptor parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiId(input, extensionRegistry);
+        return new AlarmDescriptor(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiId> parser() {
+    public static com.google.protobuf.Parser<AlarmDescriptor> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiId> getParserForType() {
+    public com.google.protobuf.Parser<AlarmDescriptor> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiId getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmDescriptor getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.Kpi)
+  public interface AlarmIDOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmID)
       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>string timestamp = 2;</code>
-     * @return The timestamp.
-     */
-    java.lang.String getTimestamp();
-    /**
-     * <code>string timestamp = 2;</code>
-     * @return The bytes for timestamp.
-     */
-    com.google.protobuf.ByteString
-        getTimestampBytes();
-
-    /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return Whether the kpiValue field is set.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    boolean hasKpiValue();
+    boolean hasAlarmId();
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return The kpiValue.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    monitoring.Monitoring.KpiValue getKpiValue();
+    context.ContextOuterClass.Uuid getAlarmId();
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
-    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
+    context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.Kpi}
+   * Protobuf type {@code monitoring.AlarmID}
    */
-  public static final class Kpi extends
+  public static final class AlarmID extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.Kpi)
-      KpiOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmID)
+      AlarmIDOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use Kpi.newBuilder() to construct.
-    private Kpi(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmID.newBuilder() to construct.
+    private AlarmID(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private Kpi() {
-      timestamp_ = "";
+    private AlarmID() {
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new Kpi();
+      return new AlarmID();
     }
 
     @java.lang.Override
@@ -2818,7 +17485,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private Kpi(
+    private AlarmID(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -2837,33 +17504,14 @@ 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();
-
-              timestamp_ = s;
-              break;
-            }
-            case 34: {
-              monitoring.Monitoring.KpiValue.Builder subBuilder = null;
-              if (kpiValue_ != null) {
-                subBuilder = kpiValue_.toBuilder();
+              context.ContextOuterClass.Uuid.Builder subBuilder = null;
+              if (alarmId_ != null) {
+                subBuilder = alarmId_.toBuilder();
               }
-              kpiValue_ = input.readMessage(monitoring.Monitoring.KpiValue.parser(), extensionRegistry);
+              alarmId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
               if (subBuilder != null) {
-                subBuilder.mergeFrom(kpiValue_);
-                kpiValue_ = subBuilder.buildPartial();
+                subBuilder.mergeFrom(alarmId_);
+                alarmId_ = subBuilder.buildPartial();
               }
 
               break;
@@ -2889,105 +17537,41 @@ 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_AlarmID_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_AlarmID_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.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 TIMESTAMP_FIELD_NUMBER = 2;
-    private volatile java.lang.Object timestamp_;
-    /**
-     * <code>string timestamp = 2;</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 timestamp = 2;</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;
-      }
+              monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
     }
 
-    public static final int KPI_VALUE_FIELD_NUMBER = 4;
-    private monitoring.Monitoring.KpiValue kpiValue_;
+    public static final int ALARM_ID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid alarmId_;
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return Whether the kpiValue field is set.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public boolean hasKpiValue() {
-      return kpiValue_ != null;
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
-     * @return The kpiValue.
+     * <code>.context.Uuid alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getKpiValue() {
-      return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+    public context.ContextOuterClass.Uuid getAlarmId() {
+      return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
     }
     /**
-     * <code>.monitoring.KpiValue kpi_value = 4;</code>
+     * <code>.context.Uuid alarm_id = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-      return getKpiValue();
+    public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
 
     private byte memoizedIsInitialized = -1;
@@ -3004,14 +17588,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 (!getTimestampBytes().isEmpty()) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, timestamp_);
-      }
-      if (kpiValue_ != null) {
-        output.writeMessage(4, getKpiValue());
+      if (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
       unknownFields.writeTo(output);
     }
@@ -3022,16 +17600,9 @@ public final class Monitoring {
       if (size != -1) return size;
 
       size = 0;
-      if (kpiId_ != null) {
-        size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, getKpiId());
-      }
-      if (!getTimestampBytes().isEmpty()) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, timestamp_);
-      }
-      if (kpiValue_ != null) {
+      if (alarmId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(4, getKpiValue());
+          .computeMessageSize(1, getAlarmId());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -3043,22 +17614,15 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.Kpi)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmID)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.Kpi other = (monitoring.Monitoring.Kpi) obj;
+      monitoring.Monitoring.AlarmID other = (monitoring.Monitoring.AlarmID) obj;
 
-      if (hasKpiId() != other.hasKpiId()) return false;
-      if (hasKpiId()) {
-        if (!getKpiId()
-            .equals(other.getKpiId())) 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 (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
       }
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
@@ -3071,84 +17635,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();
-      }
-      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 (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    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.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID 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.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.Kpi parseFrom(byte[] data)
+    public static monitoring.Monitoring.AlarmID parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.Kpi parseFrom(
+    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.Kpi parseFrom(java.io.InputStream input)
+    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.Kpi parseFrom(
+    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.Kpi parseDelimitedFrom(java.io.InputStream input)
+    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.Kpi parseDelimitedFrom(
+    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.Kpi parseFrom(
+    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.Kpi parseFrom(
+    public static monitoring.Monitoring.AlarmID parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -3161,7 +17719,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.AlarmID prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -3177,26 +17735,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.Kpi}
+     * Protobuf type {@code monitoring.AlarmID}
      */
     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.AlarmID)
+        monitoring.Monitoring.AlarmIDOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_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_AlarmID_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.Kpi.class, monitoring.Monitoring.Kpi.Builder.class);
+                monitoring.Monitoring.AlarmID.class, monitoring.Monitoring.AlarmID.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.Kpi.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmID.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -3214,19 +17772,11 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiIdBuilder_ == null) {
-          kpiId_ = null;
-        } else {
-          kpiId_ = null;
-          kpiIdBuilder_ = null;
-        }
-        timestamp_ = "";
-
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
         return this;
       }
@@ -3234,17 +17784,17 @@ public final class Monitoring {
       @java.lang.Override
       public com.google.protobuf.Descriptors.Descriptor
           getDescriptorForType() {
-        return monitoring.Monitoring.internal_static_monitoring_Kpi_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmID_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
-        return monitoring.Monitoring.Kpi.getDefaultInstance();
+      public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmID.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.Kpi build() {
-        monitoring.Monitoring.Kpi result = buildPartial();
+      public monitoring.Monitoring.AlarmID build() {
+        monitoring.Monitoring.AlarmID result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -3252,18 +17802,12 @@ 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_;
-        } else {
-          result.kpiId_ = kpiIdBuilder_.build();
-        }
-        result.timestamp_ = timestamp_;
-        if (kpiValueBuilder_ == null) {
-          result.kpiValue_ = kpiValue_;
+      public monitoring.Monitoring.AlarmID buildPartial() {
+        monitoring.Monitoring.AlarmID result = new monitoring.Monitoring.AlarmID(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
         } else {
-          result.kpiValue_ = kpiValueBuilder_.build();
+          result.alarmId_ = alarmIdBuilder_.build();
         }
         onBuilt();
         return result;
@@ -3303,25 +17847,18 @@ 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.AlarmID) {
+          return mergeFrom((monitoring.Monitoring.AlarmID)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());
-        }
-        if (!other.getTimestamp().isEmpty()) {
-          timestamp_ = other.timestamp_;
-          onChanged();
-        }
-        if (other.hasKpiValue()) {
-          mergeKpiValue(other.getKpiValue());
+      public Builder mergeFrom(monitoring.Monitoring.AlarmID other) {
+        if (other == monitoring.Monitoring.AlarmID.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -3338,332 +17875,137 @@ 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.AlarmID parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.Kpi) 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_;
-      }
-
-      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;
-        }
-      }
-      /**
-       * <code>string timestamp = 2;</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;
-        }
-      }
-      /**
-       * <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;
-      }
-      /**
-       * <code>string timestamp = 2;</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();
+          parsedMessage = (monitoring.Monitoring.AlarmID) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
         return this;
       }
 
-      private monitoring.Monitoring.KpiValue kpiValue_;
+      private context.ContextOuterClass.Uuid alarmId_;
       private com.google.protobuf.SingleFieldBuilderV3<
-          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> alarmIdBuilder_;
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
-       * @return Whether the kpiValue field is set.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasKpiValue() {
-        return kpiValueBuilder_ != null || kpiValue_ != null;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
-       * @return The kpiValue.
+       * <code>.context.Uuid alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public monitoring.Monitoring.KpiValue getKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+      public context.ContextOuterClass.Uuid getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         } else {
-          return kpiValueBuilder_.getMessage();
+          return alarmIdBuilder_.getMessage();
         }
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setKpiValue(monitoring.Monitoring.KpiValue value) {
-        if (kpiValueBuilder_ == null) {
+      public Builder setAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          kpiValue_ = value;
+          alarmId_ = value;
           onChanged();
         } else {
-          kpiValueBuilder_.setMessage(value);
+          alarmIdBuilder_.setMessage(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder setKpiValue(
-          monitoring.Monitoring.KpiValue.Builder builderForValue) {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = builderForValue.build();
+      public Builder setAlarmId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
         } else {
-          kpiValueBuilder_.setMessage(builderForValue.build());
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</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 mergeAlarmId(context.ContextOuterClass.Uuid value) {
+        if (alarmIdBuilder_ == null) {
+          if (alarmId_ != null) {
+            alarmId_ =
+              context.ContextOuterClass.Uuid.newBuilder(alarmId_).mergeFrom(value).buildPartial();
           } else {
-            kpiValue_ = value;
+            alarmId_ = value;
           }
           onChanged();
         } else {
-          kpiValueBuilder_.mergeFrom(value);
+          alarmIdBuilder_.mergeFrom(value);
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public Builder clearKpiValue() {
-        if (kpiValueBuilder_ == null) {
-          kpiValue_ = null;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
           onChanged();
         } else {
-          kpiValue_ = null;
-          kpiValueBuilder_ = null;
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
 
         return this;
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiValue.Builder getKpiValueBuilder() {
+      public context.ContextOuterClass.Uuid.Builder getAlarmIdBuilder() {
         
         onChanged();
-        return getKpiValueFieldBuilder().getBuilder();
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</code>
        */
-      public monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder() {
-        if (kpiValueBuilder_ != null) {
-          return kpiValueBuilder_.getMessageOrBuilder();
+      public context.ContextOuterClass.UuidOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
         } else {
-          return kpiValue_ == null ?
-              monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+          return alarmId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : alarmId_;
         }
       }
       /**
-       * <code>.monitoring.KpiValue kpi_value = 4;</code>
+       * <code>.context.Uuid alarm_id = 1;</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(),
+          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());
-          kpiValue_ = null;
+          alarmId_ = null;
         }
-        return kpiValueBuilder_;
+        return alarmIdBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -3678,122 +18020,113 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.Kpi)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmID)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.Kpi)
-    private static final monitoring.Monitoring.Kpi DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmID)
+    private static final monitoring.Monitoring.AlarmID DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.Kpi();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmID();
     }
 
-    public static monitoring.Monitoring.Kpi getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmID 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<AlarmID>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmID>() {
       @java.lang.Override
-      public Kpi parsePartialFrom(
+      public AlarmID parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new Kpi(input, extensionRegistry);
+        return new AlarmID(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<Kpi> parser() {
+    public static com.google.protobuf.Parser<AlarmID> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<Kpi> getParserForType() {
+    public com.google.protobuf.Parser<AlarmID> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.Kpi getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmID getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiValueOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiValue)
+  public interface AlarmResponseOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmResponse)
       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.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
-    int getIntVal();
-
+    boolean hasAlarmId();
     /**
-     * <code>float floatVal = 2;</code>
-     * @return Whether the floatVal field is set.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return The alarmId.
      */
-    boolean hasFloatVal();
+    monitoring.Monitoring.AlarmID getAlarmId();
     /**
-     * <code>float floatVal = 2;</code>
-     * @return The floatVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
      */
-    float getFloatVal();
+    monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder();
 
     /**
-     * <code>string stringVal = 3;</code>
-     * @return Whether the stringVal field is set.
-     */
-    boolean hasStringVal();
-    /**
-     * <code>string stringVal = 3;</code>
-     * @return The stringVal.
+     * <code>string text = 2;</code>
+     * @return The text.
      */
-    java.lang.String getStringVal();
+    java.lang.String getText();
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The bytes for stringVal.
+     * <code>string text = 2;</code>
+     * @return The bytes for text.
      */
     com.google.protobuf.ByteString
-        getStringValBytes();
+        getTextBytes();
 
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
-    boolean hasBoolVal();
+    boolean hasKpiValue();
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
-    boolean getBoolVal();
-
-    public monitoring.Monitoring.KpiValue.ValueCase getValueCase();
+    monitoring.Monitoring.KpiValue getKpiValue();
+    /**
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     */
+    monitoring.Monitoring.KpiValueOrBuilder getKpiValueOrBuilder();
   }
   /**
-   * Protobuf type {@code monitoring.KpiValue}
+   * Protobuf type {@code monitoring.AlarmResponse}
    */
-  public static final class KpiValue extends
+  public static final class AlarmResponse extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiValue)
-      KpiValueOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmResponse)
+      AlarmResponseOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiValue.newBuilder() to construct.
-    private KpiValue(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmResponse.newBuilder() to construct.
+    private AlarmResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiValue() {
+    private AlarmResponse() {
+      text_ = "";
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiValue();
+      return new AlarmResponse();
     }
 
     @java.lang.Override
@@ -3801,7 +18134,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiValue(
+    private AlarmResponse(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -3819,25 +18152,36 @@ public final class Monitoring {
             case 0:
               done = true;
               break;
-            case 8: {
-              valueCase_ = 1;
-              value_ = input.readUInt32();
-              break;
-            }
-            case 21: {
-              valueCase_ = 2;
-              value_ = input.readFloat();
+            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 26: {
+            case 18: {
               java.lang.String s = input.readStringRequireUtf8();
-              valueCase_ = 3;
-              value_ = s;
+
+              text_ = s;
               break;
             }
-            case 32: {
-              valueCase_ = 4;
-              value_ = input.readBool();
+            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: {
@@ -3861,175 +18205,105 @@ public final class Monitoring {
     }
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+      return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_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_AlarmResponse_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_);
+              monitoring.Monitoring.AlarmResponse.class, monitoring.Monitoring.AlarmResponse.Builder.class);
     }
 
-    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 int ALARM_ID_FIELD_NUMBER = 1;
+    private monitoring.Monitoring.AlarmID alarmId_;
     /**
-     * <code>uint32 intVal = 1;</code>
-     * @return The intVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return Whether the alarmId field is set.
      */
     @java.lang.Override
-    public int getIntVal() {
-      if (valueCase_ == 1) {
-        return (java.lang.Integer) value_;
-      }
-      return 0;
+    public boolean hasAlarmId() {
+      return alarmId_ != null;
     }
-
-    public static final int FLOATVAL_FIELD_NUMBER = 2;
     /**
-     * <code>float floatVal = 2;</code>
-     * @return Whether the floatVal field is set.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
+     * @return The alarmId.
      */
     @java.lang.Override
-    public boolean hasFloatVal() {
-      return valueCase_ == 2;
+    public monitoring.Monitoring.AlarmID getAlarmId() {
+      return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
     }
     /**
-     * <code>float floatVal = 2;</code>
-     * @return The floatVal.
+     * <code>.monitoring.AlarmID alarm_id = 1;</code>
      */
     @java.lang.Override
-    public float getFloatVal() {
-      if (valueCase_ == 2) {
-        return (java.lang.Float) value_;
-      }
-      return 0F;
+    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
+      return getAlarmId();
     }
 
-    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;
-    }
+    public static final int TEXT_FIELD_NUMBER = 2;
+    private volatile java.lang.Object text_;
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The stringVal.
+     * <code>string text = 2;</code>
+     * @return The text.
      */
-    public java.lang.String getStringVal() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 3) {
-        ref = value_;
-      }
+    @java.lang.Override
+    public java.lang.String getText() {
+      java.lang.Object ref = text_;
       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;
-        }
+        text_ = s;
         return s;
       }
     }
     /**
-     * <code>string stringVal = 3;</code>
-     * @return The bytes for stringVal.
+     * <code>string text = 2;</code>
+     * @return The bytes for text.
      */
-    public com.google.protobuf.ByteString
-        getStringValBytes() {
-      java.lang.Object ref = "";
-      if (valueCase_ == 3) {
-        ref = value_;
-      }
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getTextBytes() {
+      java.lang.Object ref = text_;
       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;
-        }
+        text_ = b;
         return b;
       } else {
         return (com.google.protobuf.ByteString) ref;
       }
     }
 
-    public static final int BOOLVAL_FIELD_NUMBER = 4;
+    public static final int KPI_VALUE_FIELD_NUMBER = 3;
+    private monitoring.Monitoring.KpiValue kpiValue_;
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return Whether the boolVal field is set.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return Whether the kpiValue field is set.
      */
     @java.lang.Override
-    public boolean hasBoolVal() {
-      return valueCase_ == 4;
+    public boolean hasKpiValue() {
+      return kpiValue_ != null;
     }
     /**
-     * <code>bool boolVal = 4;</code>
-     * @return The boolVal.
+     * <code>.monitoring.KpiValue kpi_value = 3;</code>
+     * @return The kpiValue.
      */
     @java.lang.Override
-    public boolean getBoolVal() {
-      if (valueCase_ == 4) {
-        return (java.lang.Boolean) value_;
-      }
-      return false;
+    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;
@@ -4046,20 +18320,14 @@ 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 (alarmId_ != null) {
+        output.writeMessage(1, getAlarmId());
       }
-      if (valueCase_ == 2) {
-        output.writeFloat(
-            2, (float)((java.lang.Float) value_));
-      }
-      if (valueCase_ == 3) {
-        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
+      if (!getTextBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, text_);
       }
-      if (valueCase_ == 4) {
-        output.writeBool(
-            4, (boolean)((java.lang.Boolean) value_));
+      if (kpiValue_ != null) {
+        output.writeMessage(3, getKpiValue());
       }
       unknownFields.writeTo(output);
     }
@@ -4070,23 +18338,16 @@ 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) {
+      if (alarmId_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeFloatSize(
-              2, (float)((java.lang.Float) value_));
+          .computeMessageSize(1, getAlarmId());
       }
-      if (valueCase_ == 3) {
-        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
+      if (!getTextBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, text_);
       }
-      if (valueCase_ == 4) {
+      if (kpiValue_ != null) {
         size += com.google.protobuf.CodedOutputStream
-          .computeBoolSize(
-              4, (boolean)((java.lang.Boolean) value_));
+          .computeMessageSize(3, getKpiValue());
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4098,32 +18359,22 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiValue)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmResponse)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiValue other = (monitoring.Monitoring.KpiValue) obj;
+      monitoring.Monitoring.AlarmResponse other = (monitoring.Monitoring.AlarmResponse) 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 (hasAlarmId() != other.hasAlarmId()) return false;
+      if (hasAlarmId()) {
+        if (!getAlarmId()
+            .equals(other.getAlarmId())) return false;
+      }
+      if (!getText()
+          .equals(other.getText())) 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;
@@ -4136,96 +18387,84 @@ 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 (hasAlarmId()) {
+        hash = (37 * hash) + ALARM_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmId().hashCode();
+      }
+      hash = (37 * hash) + TEXT_FIELD_NUMBER;
+      hash = (53 * hash) + getText().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.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse 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.AlarmResponse 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.AlarmResponse 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.AlarmResponse parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiValue parseFrom(
+    public static monitoring.Monitoring.AlarmResponse 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.AlarmResponse 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.AlarmResponse 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.AlarmResponse 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.AlarmResponse 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.AlarmResponse 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.AlarmResponse parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -4238,7 +18477,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.AlarmResponse prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -4254,26 +18493,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiValue}
+     * Protobuf type {@code monitoring.AlarmResponse}
      */
     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.AlarmResponse)
+        monitoring.Monitoring.AlarmResponseOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_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_AlarmResponse_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiValue.class, monitoring.Monitoring.KpiValue.Builder.class);
+                monitoring.Monitoring.AlarmResponse.class, monitoring.Monitoring.AlarmResponse.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiValue.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmResponse.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -4291,25 +18530,37 @@ public final class Monitoring {
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        valueCase_ = 0;
-        value_ = null;
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
+        } else {
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
+        }
+        text_ = "";
+
+        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_KpiValue_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmResponse_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiValue.getDefaultInstance();
+      public monitoring.Monitoring.AlarmResponse getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmResponse.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiValue build() {
-        monitoring.Monitoring.KpiValue result = buildPartial();
+      public monitoring.Monitoring.AlarmResponse build() {
+        monitoring.Monitoring.AlarmResponse result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -4317,21 +18568,19 @@ public final class Monitoring {
       }
 
       @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.AlarmResponse buildPartial() {
+        monitoring.Monitoring.AlarmResponse result = new monitoring.Monitoring.AlarmResponse(this);
+        if (alarmIdBuilder_ == null) {
+          result.alarmId_ = alarmId_;
+        } else {
+          result.alarmId_ = alarmIdBuilder_.build();
         }
-        if (valueCase_ == 4) {
-          result.value_ = value_;
+        result.text_ = text_;
+        if (kpiValueBuilder_ == null) {
+          result.kpiValue_ = kpiValue_;
+        } else {
+          result.kpiValue_ = kpiValueBuilder_.build();
         }
-        result.valueCase_ = valueCase_;
         onBuilt();
         return result;
       }
@@ -4370,38 +18619,25 @@ 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.AlarmResponse) {
+          return mergeFrom((monitoring.Monitoring.AlarmResponse)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_;
-            onChanged();
-            break;
-          }
-          case BOOLVAL: {
-            setBoolVal(other.getBoolVal());
-            break;
-          }
-          case VALUE_NOT_SET: {
-            break;
-          }
+      public Builder mergeFrom(monitoring.Monitoring.AlarmResponse other) {
+        if (other == monitoring.Monitoring.AlarmResponse.getDefaultInstance()) return this;
+        if (other.hasAlarmId()) {
+          mergeAlarmId(other.getAlarmId());
+        }
+        if (!other.getText().isEmpty()) {
+          text_ = other.text_;
+          onChanged();
+        }
+        if (other.hasKpiValue()) {
+          mergeKpiValue(other.getKpiValue());
         }
         this.mergeUnknownFields(other.unknownFields);
         onChanged();
@@ -4418,11 +18654,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.AlarmResponse parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiValue) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmResponse) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -4431,241 +18667,320 @@ 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.AlarmID alarmId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmIdBuilder_;
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return Whether the intVal field is set.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * @return Whether the alarmId field is set.
        */
-      public boolean hasIntVal() {
-        return valueCase_ == 1;
+      public boolean hasAlarmId() {
+        return alarmIdBuilder_ != null || alarmId_ != null;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return The intVal.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
+       * @return The alarmId.
        */
-      public int getIntVal() {
-        if (valueCase_ == 1) {
-          return (java.lang.Integer) value_;
+      public monitoring.Monitoring.AlarmID getAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          return alarmId_ == null ? monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
+        } else {
+          return alarmIdBuilder_.getMessage();
         }
-        return 0;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @param value The intVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder setIntVal(int value) {
-        valueCase_ = 1;
-        value_ = value;
-        onChanged();
+      public Builder setAlarmId(monitoring.Monitoring.AlarmID value) {
+        if (alarmIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          alarmId_ = value;
+          onChanged();
+        } else {
+          alarmIdBuilder_.setMessage(value);
+        }
+
         return this;
       }
       /**
-       * <code>uint32 intVal = 1;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder clearIntVal() {
-        if (valueCase_ == 1) {
-          valueCase_ = 0;
-          value_ = null;
+      public Builder setAlarmId(
+          monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = builderForValue.build();
           onChanged();
+        } else {
+          alarmIdBuilder_.setMessage(builderForValue.build());
         }
+
         return this;
       }
-
       /**
-       * <code>float floatVal = 2;</code>
-       * @return Whether the floatVal field is set.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public boolean hasFloatVal() {
-        return valueCase_ == 2;
+      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);
+        }
+
+        return this;
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @return The floatVal.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public float getFloatVal() {
-        if (valueCase_ == 2) {
-          return (java.lang.Float) value_;
+      public Builder clearAlarmId() {
+        if (alarmIdBuilder_ == null) {
+          alarmId_ = null;
+          onChanged();
+        } else {
+          alarmId_ = null;
+          alarmIdBuilder_ = null;
         }
-        return 0F;
+
+        return this;
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @param value The floatVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder setFloatVal(float value) {
-        valueCase_ = 2;
-        value_ = value;
+      public monitoring.Monitoring.AlarmID.Builder getAlarmIdBuilder() {
+        
         onChanged();
-        return this;
+        return getAlarmIdFieldBuilder().getBuilder();
       }
       /**
-       * <code>float floatVal = 2;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      public Builder clearFloatVal() {
-        if (valueCase_ == 2) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
+      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmIdOrBuilder() {
+        if (alarmIdBuilder_ != null) {
+          return alarmIdBuilder_.getMessageOrBuilder();
+        } else {
+          return alarmId_ == null ?
+              monitoring.Monitoring.AlarmID.getDefaultInstance() : alarmId_;
         }
-        return this;
       }
-
       /**
-       * <code>string stringVal = 3;</code>
-       * @return Whether the stringVal field is set.
+       * <code>.monitoring.AlarmID alarm_id = 1;</code>
        */
-      @java.lang.Override
-      public boolean hasStringVal() {
-        return valueCase_ == 3;
+      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_;
       }
+
+      private java.lang.Object text_ = "";
       /**
-       * <code>string stringVal = 3;</code>
-       * @return The stringVal.
+       * <code>string text = 2;</code>
+       * @return The text.
        */
-      @java.lang.Override
-      public java.lang.String getStringVal() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 3) {
-          ref = value_;
-        }
+      public java.lang.String getText() {
+        java.lang.Object ref = text_;
         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;
-          }
+          text_ = s;
           return s;
         } else {
           return (java.lang.String) ref;
         }
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @return The bytes for stringVal.
+       * <code>string text = 2;</code>
+       * @return The bytes for text.
        */
-      @java.lang.Override
       public com.google.protobuf.ByteString
-          getStringValBytes() {
-        java.lang.Object ref = "";
-        if (valueCase_ == 3) {
-          ref = value_;
-        }
+          getTextBytes() {
+        java.lang.Object ref = text_;
         if (ref instanceof String) {
           com.google.protobuf.ByteString b = 
               com.google.protobuf.ByteString.copyFromUtf8(
                   (java.lang.String) ref);
-          if (valueCase_ == 3) {
-            value_ = b;
-          }
+          text_ = b;
           return b;
         } else {
           return (com.google.protobuf.ByteString) ref;
         }
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @param value The stringVal to set.
+       * <code>string text = 2;</code>
+       * @param value The text to set.
        * @return This builder for chaining.
        */
-      public Builder setStringVal(
+      public Builder setText(
           java.lang.String value) {
         if (value == null) {
     throw new NullPointerException();
   }
-  valueCase_ = 3;
-        value_ = value;
+  
+        text_ = value;
         onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
+       * <code>string text = 2;</code>
        * @return This builder for chaining.
        */
-      public Builder clearStringVal() {
-        if (valueCase_ == 3) {
-          valueCase_ = 0;
-          value_ = null;
-          onChanged();
-        }
+      public Builder clearText() {
+        
+        text_ = getDefaultInstance().getText();
+        onChanged();
         return this;
       }
       /**
-       * <code>string stringVal = 3;</code>
-       * @param value The bytes for stringVal to set.
+       * <code>string text = 2;</code>
+       * @param value The bytes for text to set.
        * @return This builder for chaining.
        */
-      public Builder setStringValBytes(
+      public Builder setTextBytes(
           com.google.protobuf.ByteString value) {
         if (value == null) {
     throw new NullPointerException();
   }
   checkByteStringIsUtf8(value);
-        valueCase_ = 3;
-        value_ = value;
+        
+        text_ = value;
         onChanged();
         return this;
       }
 
+      private monitoring.Monitoring.KpiValue kpiValue_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          monitoring.Monitoring.KpiValue, monitoring.Monitoring.KpiValue.Builder, monitoring.Monitoring.KpiValueOrBuilder> kpiValueBuilder_;
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return Whether the boolVal field is set.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return Whether the kpiValue field is set.
        */
-      public boolean hasBoolVal() {
-        return valueCase_ == 4;
+      public boolean hasKpiValue() {
+        return kpiValueBuilder_ != null || kpiValue_ != null;
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @return The boolVal.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
+       * @return The kpiValue.
        */
-      public boolean getBoolVal() {
-        if (valueCase_ == 4) {
-          return (java.lang.Boolean) value_;
+      public monitoring.Monitoring.KpiValue getKpiValue() {
+        if (kpiValueBuilder_ == null) {
+          return kpiValue_ == null ? monitoring.Monitoring.KpiValue.getDefaultInstance() : kpiValue_;
+        } else {
+          return kpiValueBuilder_.getMessage();
         }
-        return false;
       }
       /**
-       * <code>bool boolVal = 4;</code>
-       * @param value The boolVal to set.
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder setBoolVal(boolean value) {
-        valueCase_ = 4;
-        value_ = value;
-        onChanged();
+      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>bool boolVal = 4;</code>
-       * @return This builder for chaining.
+       * <code>.monitoring.KpiValue kpi_value = 3;</code>
        */
-      public Builder clearBoolVal() {
-        if (valueCase_ == 4) {
-          valueCase_ = 0;
-          value_ = null;
+      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) {
@@ -4679,95 +18994,95 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiValue)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmResponse)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiValue)
-    private static final monitoring.Monitoring.KpiValue DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmResponse)
+    private static final monitoring.Monitoring.AlarmResponse DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiValue();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmResponse();
     }
 
-    public static monitoring.Monitoring.KpiValue getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmResponse 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<AlarmResponse>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmResponse>() {
       @java.lang.Override
-      public KpiValue parsePartialFrom(
+      public AlarmResponse parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiValue(input, extensionRegistry);
+        return new AlarmResponse(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiValue> parser() {
+    public static com.google.protobuf.Parser<AlarmResponse> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiValue> getParserForType() {
+    public com.google.protobuf.Parser<AlarmResponse> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiValue getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmResponse getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
   }
 
-  public interface KpiListOrBuilder extends
-      // @@protoc_insertion_point(interface_extends:monitoring.KpiList)
+  public interface AlarmIDListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:monitoring.AlarmIDList)
       com.google.protobuf.MessageOrBuilder {
 
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    java.util.List<monitoring.Monitoring.Kpi> 
-        getKpiListList();
+    java.util.List<monitoring.Monitoring.AlarmID> 
+        getAlarmListList();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    monitoring.Monitoring.Kpi getKpiList(int index);
+    monitoring.Monitoring.AlarmID getAlarmList(int index);
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    int getKpiListCount();
+    int getAlarmListCount();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList();
+    java.util.List<? extends monitoring.Monitoring.AlarmIDOrBuilder> 
+        getAlarmListOrBuilderList();
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+    monitoring.Monitoring.AlarmIDOrBuilder getAlarmListOrBuilder(
         int index);
   }
   /**
-   * Protobuf type {@code monitoring.KpiList}
+   * Protobuf type {@code monitoring.AlarmIDList}
    */
-  public static final class KpiList extends
+  public static final class AlarmIDList extends
       com.google.protobuf.GeneratedMessageV3 implements
-      // @@protoc_insertion_point(message_implements:monitoring.KpiList)
-      KpiListOrBuilder {
+      // @@protoc_insertion_point(message_implements:monitoring.AlarmIDList)
+      AlarmIDListOrBuilder {
   private static final long serialVersionUID = 0L;
-    // Use KpiList.newBuilder() to construct.
-    private KpiList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    // Use AlarmIDList.newBuilder() to construct.
+    private AlarmIDList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
       super(builder);
     }
-    private KpiList() {
-      kpiList_ = java.util.Collections.emptyList();
+    private AlarmIDList() {
+      alarmList_ = java.util.Collections.emptyList();
     }
 
     @java.lang.Override
     @SuppressWarnings({"unused"})
     protected java.lang.Object newInstance(
         UnusedPrivateParameter unused) {
-      return new KpiList();
+      return new AlarmIDList();
     }
 
     @java.lang.Override
@@ -4775,7 +19090,7 @@ public final class Monitoring {
     getUnknownFields() {
       return this.unknownFields;
     }
-    private KpiList(
+    private AlarmIDList(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
@@ -4796,11 +19111,11 @@ public final class Monitoring {
               break;
             case 10: {
               if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-                kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>();
+                alarmList_ = new java.util.ArrayList<monitoring.Monitoring.AlarmID>();
                 mutable_bitField0_ |= 0x00000001;
               }
-              kpiList_.add(
-                  input.readMessage(monitoring.Monitoring.Kpi.parser(), extensionRegistry));
+              alarmList_.add(
+                  input.readMessage(monitoring.Monitoring.AlarmID.parser(), extensionRegistry));
               break;
             }
             default: {
@@ -4819,7 +19134,7 @@ public final class Monitoring {
             e).setUnfinishedMessage(this);
       } finally {
         if (((mutable_bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+          alarmList_ = java.util.Collections.unmodifiableList(alarmList_);
         }
         this.unknownFields = unknownFields.build();
         makeExtensionsImmutable();
@@ -4827,55 +19142,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_AlarmIDList_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_AlarmIDList_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+              monitoring.Monitoring.AlarmIDList.class, monitoring.Monitoring.AlarmIDList.Builder.class);
     }
 
-    public static final int KPI_LIST_FIELD_NUMBER = 1;
-    private java.util.List<monitoring.Monitoring.Kpi> kpiList_;
+    public static final int ALARM_LIST_FIELD_NUMBER = 1;
+    private java.util.List<monitoring.Monitoring.AlarmID> alarmList_;
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<monitoring.Monitoring.Kpi> getKpiListList() {
-      return kpiList_;
+    public java.util.List<monitoring.Monitoring.AlarmID> getAlarmListList() {
+      return alarmList_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public java.util.List<? extends monitoring.Monitoring.KpiOrBuilder> 
-        getKpiListOrBuilderList() {
-      return kpiList_;
+    public java.util.List<? extends monitoring.Monitoring.AlarmIDOrBuilder> 
+        getAlarmListOrBuilderList() {
+      return alarmList_;
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public int getKpiListCount() {
-      return kpiList_.size();
+    public int getAlarmListCount() {
+      return alarmList_.size();
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
-    @java.lang.Override
-    public monitoring.Monitoring.Kpi getKpiList(int index) {
-      return kpiList_.get(index);
+    @java.lang.Override
+    public monitoring.Monitoring.AlarmID getAlarmList(int index) {
+      return alarmList_.get(index);
     }
     /**
-     * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+     * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
      */
     @java.lang.Override
-    public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+    public monitoring.Monitoring.AlarmIDOrBuilder getAlarmListOrBuilder(
         int index) {
-      return kpiList_.get(index);
+      return alarmList_.get(index);
     }
 
     private byte memoizedIsInitialized = -1;
@@ -4892,8 +19207,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 < alarmList_.size(); i++) {
+        output.writeMessage(1, alarmList_.get(i));
       }
       unknownFields.writeTo(output);
     }
@@ -4904,9 +19219,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 < alarmList_.size(); i++) {
         size += com.google.protobuf.CodedOutputStream
-          .computeMessageSize(1, kpiList_.get(i));
+          .computeMessageSize(1, alarmList_.get(i));
       }
       size += unknownFields.getSerializedSize();
       memoizedSize = size;
@@ -4918,13 +19233,13 @@ public final class Monitoring {
       if (obj == this) {
        return true;
       }
-      if (!(obj instanceof monitoring.Monitoring.KpiList)) {
+      if (!(obj instanceof monitoring.Monitoring.AlarmIDList)) {
         return super.equals(obj);
       }
-      monitoring.Monitoring.KpiList other = (monitoring.Monitoring.KpiList) obj;
+      monitoring.Monitoring.AlarmIDList other = (monitoring.Monitoring.AlarmIDList) obj;
 
-      if (!getKpiListList()
-          .equals(other.getKpiListList())) return false;
+      if (!getAlarmListList()
+          .equals(other.getAlarmListList())) return false;
       if (!unknownFields.equals(other.unknownFields)) return false;
       return true;
     }
@@ -4936,78 +19251,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 (getAlarmListCount() > 0) {
+        hash = (37 * hash) + ALARM_LIST_FIELD_NUMBER;
+        hash = (53 * hash) + getAlarmListList().hashCode();
       }
       hash = (29 * hash) + unknownFields.hashCode();
       memoizedHashCode = hash;
       return hash;
     }
 
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList parseFrom(
         java.nio.ByteBuffer data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList 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.AlarmIDList 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.AlarmIDList 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.AlarmIDList parseFrom(byte[] data)
         throws com.google.protobuf.InvalidProtocolBufferException {
       return PARSER.parseFrom(data);
     }
-    public static monitoring.Monitoring.KpiList parseFrom(
+    public static monitoring.Monitoring.AlarmIDList 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.AlarmIDList 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.AlarmIDList 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.AlarmIDList 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.AlarmIDList 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.AlarmIDList 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.AlarmIDList parseFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
@@ -5020,7 +19335,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.AlarmIDList prototype) {
       return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
     }
     @java.lang.Override
@@ -5036,26 +19351,26 @@ public final class Monitoring {
       return builder;
     }
     /**
-     * Protobuf type {@code monitoring.KpiList}
+     * Protobuf type {@code monitoring.AlarmIDList}
      */
     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.AlarmIDList)
+        monitoring.Monitoring.AlarmIDListOrBuilder {
       public static final com.google.protobuf.Descriptors.Descriptor
           getDescriptor() {
-        return monitoring.Monitoring.internal_static_monitoring_KpiList_descriptor;
+        return monitoring.Monitoring.internal_static_monitoring_AlarmIDList_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_AlarmIDList_fieldAccessorTable
             .ensureFieldAccessorsInitialized(
-                monitoring.Monitoring.KpiList.class, monitoring.Monitoring.KpiList.Builder.class);
+                monitoring.Monitoring.AlarmIDList.class, monitoring.Monitoring.AlarmIDList.Builder.class);
       }
 
-      // Construct using monitoring.Monitoring.KpiList.newBuilder()
+      // Construct using monitoring.Monitoring.AlarmIDList.newBuilder()
       private Builder() {
         maybeForceBuilderInitialization();
       }
@@ -5068,17 +19383,17 @@ public final class Monitoring {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getKpiListFieldBuilder();
+          getAlarmListFieldBuilder();
         }
       }
       @java.lang.Override
       public Builder clear() {
         super.clear();
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+        if (alarmListBuilder_ == null) {
+          alarmList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
         } else {
-          kpiListBuilder_.clear();
+          alarmListBuilder_.clear();
         }
         return this;
       }
@@ -5086,17 +19401,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_AlarmIDList_descriptor;
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
-        return monitoring.Monitoring.KpiList.getDefaultInstance();
+      public monitoring.Monitoring.AlarmIDList getDefaultInstanceForType() {
+        return monitoring.Monitoring.AlarmIDList.getDefaultInstance();
       }
 
       @java.lang.Override
-      public monitoring.Monitoring.KpiList build() {
-        monitoring.Monitoring.KpiList result = buildPartial();
+      public monitoring.Monitoring.AlarmIDList build() {
+        monitoring.Monitoring.AlarmIDList result = buildPartial();
         if (!result.isInitialized()) {
           throw newUninitializedMessageException(result);
         }
@@ -5104,17 +19419,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.AlarmIDList buildPartial() {
+        monitoring.Monitoring.AlarmIDList result = new monitoring.Monitoring.AlarmIDList(this);
         int from_bitField0_ = bitField0_;
-        if (kpiListBuilder_ == null) {
+        if (alarmListBuilder_ == null) {
           if (((bitField0_ & 0x00000001) != 0)) {
-            kpiList_ = java.util.Collections.unmodifiableList(kpiList_);
+            alarmList_ = java.util.Collections.unmodifiableList(alarmList_);
             bitField0_ = (bitField0_ & ~0x00000001);
           }
-          result.kpiList_ = kpiList_;
+          result.alarmList_ = alarmList_;
         } else {
-          result.kpiList_ = kpiListBuilder_.build();
+          result.alarmList_ = alarmListBuilder_.build();
         }
         onBuilt();
         return result;
@@ -5154,39 +19469,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.AlarmIDList) {
+          return mergeFrom((monitoring.Monitoring.AlarmIDList)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.AlarmIDList other) {
+        if (other == monitoring.Monitoring.AlarmIDList.getDefaultInstance()) return this;
+        if (alarmListBuilder_ == null) {
+          if (!other.alarmList_.isEmpty()) {
+            if (alarmList_.isEmpty()) {
+              alarmList_ = other.alarmList_;
               bitField0_ = (bitField0_ & ~0x00000001);
             } else {
-              ensureKpiListIsMutable();
-              kpiList_.addAll(other.kpiList_);
+              ensureAlarmListIsMutable();
+              alarmList_.addAll(other.alarmList_);
             }
             onChanged();
           }
         } else {
-          if (!other.kpiList_.isEmpty()) {
-            if (kpiListBuilder_.isEmpty()) {
-              kpiListBuilder_.dispose();
-              kpiListBuilder_ = null;
-              kpiList_ = other.kpiList_;
+          if (!other.alarmList_.isEmpty()) {
+            if (alarmListBuilder_.isEmpty()) {
+              alarmListBuilder_.dispose();
+              alarmListBuilder_ = null;
+              alarmList_ = other.alarmList_;
               bitField0_ = (bitField0_ & ~0x00000001);
-              kpiListBuilder_ = 
+              alarmListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
-                   getKpiListFieldBuilder() : null;
+                   getAlarmListFieldBuilder() : null;
             } else {
-              kpiListBuilder_.addAllMessages(other.kpiList_);
+              alarmListBuilder_.addAllMessages(other.alarmList_);
             }
           }
         }
@@ -5205,11 +19520,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.AlarmIDList parsedMessage = null;
         try {
           parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
         } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-          parsedMessage = (monitoring.Monitoring.KpiList) e.getUnfinishedMessage();
+          parsedMessage = (monitoring.Monitoring.AlarmIDList) e.getUnfinishedMessage();
           throw e.unwrapIOException();
         } finally {
           if (parsedMessage != null) {
@@ -5220,244 +19535,244 @@ public final class Monitoring {
       }
       private int bitField0_;
 
-      private java.util.List<monitoring.Monitoring.Kpi> kpiList_ =
+      private java.util.List<monitoring.Monitoring.AlarmID> alarmList_ =
         java.util.Collections.emptyList();
-      private void ensureKpiListIsMutable() {
+      private void ensureAlarmListIsMutable() {
         if (!((bitField0_ & 0x00000001) != 0)) {
-          kpiList_ = new java.util.ArrayList<monitoring.Monitoring.Kpi>(kpiList_);
+          alarmList_ = new java.util.ArrayList<monitoring.Monitoring.AlarmID>(alarmList_);
           bitField0_ |= 0x00000001;
          }
       }
 
       private com.google.protobuf.RepeatedFieldBuilderV3<
-          monitoring.Monitoring.Kpi, monitoring.Monitoring.Kpi.Builder, monitoring.Monitoring.KpiOrBuilder> kpiListBuilder_;
+          monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> alarmListBuilder_;
 
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_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.AlarmID> getAlarmListList() {
+        if (alarmListBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(alarmList_);
         } else {
-          return kpiListBuilder_.getMessageList();
+          return alarmListBuilder_.getMessageList();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public int getKpiListCount() {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.size();
+      public int getAlarmListCount() {
+        if (alarmListBuilder_ == null) {
+          return alarmList_.size();
         } else {
-          return kpiListBuilder_.getCount();
+          return alarmListBuilder_.getCount();
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi getKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);
+      public monitoring.Monitoring.AlarmID getAlarmList(int index) {
+        if (alarmListBuilder_ == null) {
+          return alarmList_.get(index);
         } else {
-          return kpiListBuilder_.getMessage(index);
+          return alarmListBuilder_.getMessage(index);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder setAlarmList(
+          int index, monitoring.Monitoring.AlarmID value) {
+        if (alarmListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.set(index, value);
+          ensureAlarmListIsMutable();
+          alarmList_.set(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, value);
+          alarmListBuilder_.setMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder setKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.set(index, builderForValue.build());
+      public Builder setAlarmList(
+          int index, monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.set(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.setMessage(index, builderForValue.build());
+          alarmListBuilder_.setMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addAlarmList(monitoring.Monitoring.AlarmID value) {
+        if (alarmListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(value);
+          ensureAlarmListIsMutable();
+          alarmList_.add(value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(value);
+          alarmListBuilder_.addMessage(value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi value) {
-        if (kpiListBuilder_ == null) {
+      public Builder addAlarmList(
+          int index, monitoring.Monitoring.AlarmID value) {
+        if (alarmListBuilder_ == null) {
           if (value == null) {
             throw new NullPointerException();
           }
-          ensureKpiListIsMutable();
-          kpiList_.add(index, value);
+          ensureAlarmListIsMutable();
+          alarmList_.add(index, value);
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, value);
+          alarmListBuilder_.addMessage(index, value);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(
-          monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(builderForValue.build());
+      public Builder addAlarmList(
+          monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.add(builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(builderForValue.build());
+          alarmListBuilder_.addMessage(builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addKpiList(
-          int index, monitoring.Monitoring.Kpi.Builder builderForValue) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.add(index, builderForValue.build());
+      public Builder addAlarmList(
+          int index, monitoring.Monitoring.AlarmID.Builder builderForValue) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.add(index, builderForValue.build());
           onChanged();
         } else {
-          kpiListBuilder_.addMessage(index, builderForValue.build());
+          alarmListBuilder_.addMessage(index, builderForValue.build());
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder addAllKpiList(
-          java.lang.Iterable<? extends monitoring.Monitoring.Kpi> values) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
+      public Builder addAllAlarmList(
+          java.lang.Iterable<? extends monitoring.Monitoring.AlarmID> values) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
           com.google.protobuf.AbstractMessageLite.Builder.addAll(
-              values, kpiList_);
+              values, alarmList_);
           onChanged();
         } else {
-          kpiListBuilder_.addAllMessages(values);
+          alarmListBuilder_.addAllMessages(values);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder clearKpiList() {
-        if (kpiListBuilder_ == null) {
-          kpiList_ = java.util.Collections.emptyList();
+      public Builder clearAlarmList() {
+        if (alarmListBuilder_ == null) {
+          alarmList_ = java.util.Collections.emptyList();
           bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
-          kpiListBuilder_.clear();
+          alarmListBuilder_.clear();
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public Builder removeKpiList(int index) {
-        if (kpiListBuilder_ == null) {
-          ensureKpiListIsMutable();
-          kpiList_.remove(index);
+      public Builder removeAlarmList(int index) {
+        if (alarmListBuilder_ == null) {
+          ensureAlarmListIsMutable();
+          alarmList_.remove(index);
           onChanged();
         } else {
-          kpiListBuilder_.remove(index);
+          alarmListBuilder_.remove(index);
         }
         return this;
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder getKpiListBuilder(
+      public monitoring.Monitoring.AlarmID.Builder getAlarmListBuilder(
           int index) {
-        return getKpiListFieldBuilder().getBuilder(index);
+        return getAlarmListFieldBuilder().getBuilder(index);
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.KpiOrBuilder getKpiListOrBuilder(
+      public monitoring.Monitoring.AlarmIDOrBuilder getAlarmListOrBuilder(
           int index) {
-        if (kpiListBuilder_ == null) {
-          return kpiList_.get(index);  } else {
-          return kpiListBuilder_.getMessageOrBuilder(index);
+        if (alarmListBuilder_ == null) {
+          return alarmList_.get(index);  } else {
+          return alarmListBuilder_.getMessageOrBuilder(index);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_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.AlarmIDOrBuilder> 
+           getAlarmListOrBuilderList() {
+        if (alarmListBuilder_ != null) {
+          return alarmListBuilder_.getMessageOrBuilderList();
         } else {
-          return java.util.Collections.unmodifiableList(kpiList_);
+          return java.util.Collections.unmodifiableList(alarmList_);
         }
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder() {
-        return getKpiListFieldBuilder().addBuilder(
-            monitoring.Monitoring.Kpi.getDefaultInstance());
+      public monitoring.Monitoring.AlarmID.Builder addAlarmListBuilder() {
+        return getAlarmListFieldBuilder().addBuilder(
+            monitoring.Monitoring.AlarmID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public monitoring.Monitoring.Kpi.Builder addKpiListBuilder(
+      public monitoring.Monitoring.AlarmID.Builder addAlarmListBuilder(
           int index) {
-        return getKpiListFieldBuilder().addBuilder(
-            index, monitoring.Monitoring.Kpi.getDefaultInstance());
+        return getAlarmListFieldBuilder().addBuilder(
+            index, monitoring.Monitoring.AlarmID.getDefaultInstance());
       }
       /**
-       * <code>repeated .monitoring.Kpi kpi_list = 1;</code>
+       * <code>repeated .monitoring.AlarmID alarm_list = 1;</code>
        */
-      public java.util.List<monitoring.Monitoring.Kpi.Builder> 
-           getKpiListBuilderList() {
-        return getKpiListFieldBuilder().getBuilderList();
+      public java.util.List<monitoring.Monitoring.AlarmID.Builder> 
+           getAlarmListBuilderList() {
+        return getAlarmListFieldBuilder().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.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder> 
+          getAlarmListFieldBuilder() {
+        if (alarmListBuilder_ == null) {
+          alarmListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmID.Builder, monitoring.Monitoring.AlarmIDOrBuilder>(
+                  alarmList_,
                   ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
-          kpiList_ = null;
+          alarmList_ = null;
         }
-        return kpiListBuilder_;
+        return alarmListBuilder_;
       }
       @java.lang.Override
       public final Builder setUnknownFields(
@@ -5472,41 +19787,41 @@ public final class Monitoring {
       }
 
 
-      // @@protoc_insertion_point(builder_scope:monitoring.KpiList)
+      // @@protoc_insertion_point(builder_scope:monitoring.AlarmIDList)
     }
 
-    // @@protoc_insertion_point(class_scope:monitoring.KpiList)
-    private static final monitoring.Monitoring.KpiList DEFAULT_INSTANCE;
+    // @@protoc_insertion_point(class_scope:monitoring.AlarmIDList)
+    private static final monitoring.Monitoring.AlarmIDList DEFAULT_INSTANCE;
     static {
-      DEFAULT_INSTANCE = new monitoring.Monitoring.KpiList();
+      DEFAULT_INSTANCE = new monitoring.Monitoring.AlarmIDList();
     }
 
-    public static monitoring.Monitoring.KpiList getDefaultInstance() {
+    public static monitoring.Monitoring.AlarmIDList 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<AlarmIDList>
+        PARSER = new com.google.protobuf.AbstractParser<AlarmIDList>() {
       @java.lang.Override
-      public KpiList parsePartialFrom(
+      public AlarmIDList parsePartialFrom(
           com.google.protobuf.CodedInputStream input,
           com.google.protobuf.ExtensionRegistryLite extensionRegistry)
           throws com.google.protobuf.InvalidProtocolBufferException {
-        return new KpiList(input, extensionRegistry);
+        return new AlarmIDList(input, extensionRegistry);
       }
     };
 
-    public static com.google.protobuf.Parser<KpiList> parser() {
+    public static com.google.protobuf.Parser<AlarmIDList> parser() {
       return PARSER;
     }
 
     @java.lang.Override
-    public com.google.protobuf.Parser<KpiList> getParserForType() {
+    public com.google.protobuf.Parser<AlarmIDList> getParserForType() {
       return PARSER;
     }
 
     @java.lang.Override
-    public monitoring.Monitoring.KpiList getDefaultInstanceForType() {
+    public monitoring.Monitoring.AlarmIDList getDefaultInstanceForType() {
       return DEFAULT_INSTANCE;
     }
 
@@ -5517,11 +19832,26 @@ 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 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiQuery_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiQuery_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_KpiId_descriptor;
   private static final 
@@ -5532,6 +19862,11 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_Kpi_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiValueRange_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiValueRange_fieldAccessorTable;
   private static final com.google.protobuf.Descriptors.Descriptor
     internal_static_monitoring_KpiValue_descriptor;
   private static final 
@@ -5542,6 +19877,51 @@ public final class Monitoring {
   private static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_monitoring_KpiList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_KpiDescriptorList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_KpiDescriptorList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubsDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubsDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubscriptionID_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubscriptionID_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubsResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubsResponse_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_SubsIDList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_SubsIDList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmDescriptor_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmDescriptor_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmID_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmID_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmResponse_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmResponse_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_monitoring_AlarmIDList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_monitoring_AlarmIDList_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -5552,32 +19932,97 @@ public final class Monitoring {
   static {
     java.lang.String[] descriptorData = {
       "\n\020monitoring.proto\022\nmonitoring\032\rcontext." +
-      "proto\032\026kpi_sample_types.proto\"\332\001\n\rKpiDes" +
+      "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\"p\n\021MonitorKpiRequest\022!\n\006kpi_i" +
-      "d\030\001 \001(\0132\021.monitoring.KpiId\022\033\n\023sampling_d" +
-      "uration_s\030\002 \001(\002\022\033\n\023sampling_interval_s\030\003" +
-      " \001(\002\"&\n\005KpiId\022\035\n\006kpi_id\030\001 \001(\0132\r.context." +
-      "Uuid\"d\n\003Kpi\022!\n\006kpi_id\030\001 \001(\0132\021.monitoring" +
-      ".KpiId\022\021\n\ttimestamp\030\002 \001(\t\022\'\n\tkpi_value\030\004" +
-      " \001(\0132\024.monitoring.KpiValue\"a\n\010KpiValue\022\020" +
-      "\n\006intVal\030\001 \001(\rH\000\022\022\n\010floatVal\030\002 \001(\002H\000\022\023\n\t" +
-      "stringVal\030\003 \001(\tH\000\022\021\n\007boolVal\030\004 \001(\010H\000B\007\n\005" +
-      "value\",\n\007KpiList\022!\n\010kpi_list\030\001 \003(\0132\017.mon" +
-      "itoring.Kpi2\363\002\n\021MonitoringService\022;\n\tCre" +
-      "ateKpi\022\031.monitoring.KpiDescriptor\032\021.moni" +
-      "toring.KpiId\"\000\022B\n\020GetKpiDescriptor\022\021.mon" +
-      "itoring.KpiId\032\031.monitoring.KpiDescriptor" +
-      "\"\000\022/\n\nIncludeKpi\022\017.monitoring.Kpi\032\016.cont" +
-      "ext.Empty\"\000\022=\n\nMonitorKpi\022\035.monitoring.M" +
-      "onitorKpiRequest\032\016.context.Empty\"\000\0226\n\014Ge" +
-      "tStreamKpi\022\021.monitoring.KpiId\032\017.monitori" +
-      "ng.Kpi\"\0000\001\0225\n\rGetInstantKpi\022\021.monitoring" +
-      ".KpiId\032\017.monitoring.Kpi\"\000b\006proto3"
+      ".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" +
+      "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"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -5590,37 +20035,115 @@ 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", });
-    internal_static_monitoring_MonitorKpiRequest_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);
     internal_static_monitoring_MonitorKpiRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_monitoring_MonitorKpiRequest_descriptor,
-        new java.lang.String[] { "KpiId", "SamplingDurationS", "SamplingIntervalS", });
+        new java.lang.String[] { "KpiId", "MonitoringWindowS", "SamplingRateS", });
+    internal_static_monitoring_KpiQuery_descriptor =
+      getDescriptor().getMessageTypes().get(4);
+    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", });
     internal_static_monitoring_KpiId_descriptor =
-      getDescriptor().getMessageTypes().get(2);
+      getDescriptor().getMessageTypes().get(5);
     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(3);
+      getDescriptor().getMessageTypes().get(6);
     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);
+    internal_static_monitoring_KpiValueRange_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_KpiValueRange_descriptor,
+        new java.lang.String[] { "KpiMinValue", "KpiMaxValue", });
     internal_static_monitoring_KpiValue_descriptor =
-      getDescriptor().getMessageTypes().get(4);
+      getDescriptor().getMessageTypes().get(8);
     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", });
     internal_static_monitoring_KpiList_descriptor =
-      getDescriptor().getMessageTypes().get(5);
+      getDescriptor().getMessageTypes().get(9);
     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);
+    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);
+    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", });
+    internal_static_monitoring_SubscriptionID_descriptor =
+      getDescriptor().getMessageTypes().get(12);
+    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);
+    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);
+    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);
+    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", });
+    internal_static_monitoring_AlarmID_descriptor =
+      getDescriptor().getMessageTypes().get(16);
+    internal_static_monitoring_AlarmID_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmID_descriptor,
+        new java.lang.String[] { "AlarmId", });
+    internal_static_monitoring_AlarmResponse_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_monitoring_AlarmResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmResponse_descriptor,
+        new java.lang.String[] { "AlarmId", "Text", "KpiValue", });
+    internal_static_monitoring_AlarmIDList_descriptor =
+      getDescriptor().getMessageTypes().get(18);
+    internal_static_monitoring_AlarmIDList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_monitoring_AlarmIDList_descriptor,
+        new java.lang.String[] { "AlarmList", });
     context.ContextOuterClass.getDescriptor();
     kpi_sample_types.KpiSampleTypes.getDescriptor();
   }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
index 480e193125e51851a72e18473c139d71190bab11..f826e1167d1ed56567fc470ba70cc09003617eda 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringService.java
@@ -10,16 +10,40 @@ 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<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<context.ContextOuterClass.Empty> includeKpi(monitoring.Monitoring.Kpi request);
     
     io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> monitorKpi(monitoring.Monitoring.MonitorKpiRequest request);
     
-    io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request);
+    
+    io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request);
+    
+    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> editKpiAlarm(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.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request);
     
-    io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request);
+    io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request);
     
     
 
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
index b0b2f5abd4144d8f6e41c2613a36c5b78051dd57..c7f776e7bd0c56cabc7009e7b7bdb208669fb441 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceBean.java
@@ -24,6 +24,38 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+       try {
+         return delegate.editKpiDescriptor(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) {
+       try {
+         return delegate.deleteKpi(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getKpiDescriptorList(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+       try {
+         return delegate.createBundleKpi(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) {
        try {
          return delegate.getKpiDescriptor(request);
@@ -48,18 +80,83 @@ public class MonitoringServiceBean extends MutinyMonitoringServiceGrpc.Monitorin
        }
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+       try {
+         return delegate.queryKpiData(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) {
+       try {
+         return delegate.getSubsDescriptor(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) {
+       try {
+         return delegate.getSubscriptions(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) {
+       try {
+         return delegate.editKpiSubscription(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) {
+       try {
+         return delegate.createKpiAlarm(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) {
+       try {
+         return delegate.editKpiAlarm(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) {
+       try {
+         return delegate.getAlarms(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) {
+       try {
+         return delegate.getAlarmDescriptor(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) {
        try {
-         return delegate.getInstantKpi(request);
+         return delegate.subscribeKpi(request);
        } catch (UnsupportedOperationException e) {
           throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
        }
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
        try {
-         return delegate.getStreamKpi(request);
+         return delegate.getAlarmResponseStream(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 293a7c418e6e027792e8007234e34225b8c1848a..35c98e8ff2c240e749e602c4d097c3bef81c8203 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceClient.java
@@ -25,6 +25,22 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.createKpi(request);
     }
     @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+       return stub.editKpiDescriptor(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);
     }
@@ -37,13 +53,46 @@ public class MonitoringServiceClient implements MonitoringService, MutinyClient<
        return stub.monitorKpi(request);
     }
     @Override
-    public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getInstantKpi(request);
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+       return stub.queryKpiData(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+       return stub.getSubsDescriptor(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+       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);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+       return stub.editKpiAlarm(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+       return stub.getAlarms(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+       return stub.getAlarmDescriptor(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+       return stub.subscribeKpi(request);
     }
 
     @Override
-    public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-       return stub.getStreamKpi(request);
+    public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+       return stub.getAlarmResponseStream(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 7749c322a714ed96bc523a6bb77da9d43e54dbca..d4ae3510a2f622b195854e4c7d197b8e3ff4d5fd 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MonitoringServiceGrpc.java
@@ -45,6 +45,130 @@ public final class MonitoringServiceGrpc {
     return getCreateKpiMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.EditedKpiDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiDescriptor",
+      requestType = monitoring.Monitoring.EditedKpiDescriptor.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) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiDescriptorMethod = MonitoringServiceGrpc.getEditKpiDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiDescriptorMethod = getEditKpiDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.EditedKpiDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.EditedKpiDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
+      context.ContextOuterClass.Empty> getDeleteKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      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.KpiId,
+      context.ContextOuterClass.Empty> getDeleteKpiMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, context.ContextOuterClass.Empty> getDeleteKpiMethod;
+    if ((getDeleteKpiMethod = MonitoringServiceGrpc.getDeleteKpiMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        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, "DeleteKpi"))
+              .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"))
+              .build();
+        }
+      }
+    }
+    return getDeleteKpiMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.KpiDescriptorList> getGetKpiDescriptorListMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetKpiDescriptorList",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.KpiDescriptorList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.KpiDescriptorList> getGetKpiDescriptorListMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, monitoring.Monitoring.KpiDescriptorList> getGetKpiDescriptorListMethod;
+    if ((getGetKpiDescriptorListMethod = MonitoringServiceGrpc.getGetKpiDescriptorListMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetKpiDescriptorListMethod = MonitoringServiceGrpc.getGetKpiDescriptorListMethod) == null) {
+          MonitoringServiceGrpc.getGetKpiDescriptorListMethod = getGetKpiDescriptorListMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, monitoring.Monitoring.KpiDescriptorList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetKpiDescriptorList"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiDescriptorList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetKpiDescriptorList"))
+              .build();
+        }
+      }
+    }
+    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;
 
@@ -138,66 +262,314 @@ public final class MonitoringServiceGrpc {
     return getMonitorKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetStreamKpiMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery,
+      monitoring.Monitoring.KpiList> getQueryKpiDataMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetStreamKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.Kpi.class,
+      fullMethodName = SERVICE_NAME + '/' + "QueryKpiData",
+      requestType = monitoring.Monitoring.KpiQuery.class,
+      responseType = monitoring.Monitoring.KpiList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery,
+      monitoring.Monitoring.KpiList> getQueryKpiDataMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.KpiList> getQueryKpiDataMethod;
+    if ((getQueryKpiDataMethod = MonitoringServiceGrpc.getQueryKpiDataMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getQueryKpiDataMethod = MonitoringServiceGrpc.getQueryKpiDataMethod) == null) {
+          MonitoringServiceGrpc.getQueryKpiDataMethod = getQueryKpiDataMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiQuery, monitoring.Monitoring.KpiList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "QueryKpiData"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiQuery.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.KpiList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("QueryKpiData"))
+              .build();
+        }
+      }
+    }
+    return getQueryKpiDataMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      monitoring.Monitoring.KpiList> getSubscribeKpiMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SubscribeKpi",
+      requestType = monitoring.Monitoring.SubsDescriptor.class,
+      responseType = monitoring.Monitoring.KpiList.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) {
+  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) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetStreamKpiMethod = MonitoringServiceGrpc.getGetStreamKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetStreamKpiMethod = getGetStreamKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+        if ((getSubscribeKpiMethod = MonitoringServiceGrpc.getSubscribeKpiMethod) == null) {
+          MonitoringServiceGrpc.getSubscribeKpiMethod = getSubscribeKpiMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, monitoring.Monitoring.KpiList>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetStreamKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SubscribeKpi"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.Kpi.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetStreamKpi"))
+                  monitoring.Monitoring.KpiList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("SubscribeKpi"))
               .build();
         }
       }
     }
-    return getGetStreamKpiMethod;
+    return getSubscribeKpiMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetInstantKpiMethod;
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
+      monitoring.Monitoring.SubsDescriptor> getGetSubsDescriptorMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetInstantKpi",
-      requestType = monitoring.Monitoring.KpiId.class,
-      responseType = monitoring.Monitoring.Kpi.class,
+      fullMethodName = SERVICE_NAME + '/' + "GetSubsDescriptor",
+      requestType = monitoring.Monitoring.SubscriptionID.class,
+      responseType = monitoring.Monitoring.SubsDescriptor.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId,
-      monitoring.Monitoring.Kpi> getGetInstantKpiMethod() {
-    io.grpc.MethodDescriptor<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi> getGetInstantKpiMethod;
-    if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID,
+      monitoring.Monitoring.SubsDescriptor> getGetSubsDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubsDescriptor> getGetSubsDescriptorMethod;
+    if ((getGetSubsDescriptorMethod = MonitoringServiceGrpc.getGetSubsDescriptorMethod) == null) {
       synchronized (MonitoringServiceGrpc.class) {
-        if ((getGetInstantKpiMethod = MonitoringServiceGrpc.getGetInstantKpiMethod) == null) {
-          MonitoringServiceGrpc.getGetInstantKpiMethod = getGetInstantKpiMethod =
-              io.grpc.MethodDescriptor.<monitoring.Monitoring.KpiId, monitoring.Monitoring.Kpi>newBuilder()
+        if ((getGetSubsDescriptorMethod = MonitoringServiceGrpc.getGetSubsDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetSubsDescriptorMethod = getGetSubsDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubscriptionID, monitoring.Monitoring.SubsDescriptor>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInstantKpi"))
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSubsDescriptor"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.KpiId.getDefaultInstance()))
+                  monitoring.Monitoring.SubscriptionID.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  monitoring.Monitoring.Kpi.getDefaultInstance()))
-              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetInstantKpi"))
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetSubsDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetSubsDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.SubsIDList> getGetSubscriptionsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetSubscriptions",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.SubsIDList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.SubsIDList> getGetSubscriptionsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, monitoring.Monitoring.SubsIDList> getGetSubscriptionsMethod;
+    if ((getGetSubscriptionsMethod = MonitoringServiceGrpc.getGetSubscriptionsMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetSubscriptionsMethod = MonitoringServiceGrpc.getGetSubscriptionsMethod) == null) {
+          MonitoringServiceGrpc.getGetSubscriptionsMethod = getGetSubscriptionsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, monitoring.Monitoring.SubsIDList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetSubscriptions"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.SubsIDList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetSubscriptions"))
+              .build();
+        }
+      }
+    }
+    return getGetSubscriptionsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.SubsDescriptor,
+      context.ContextOuterClass.Empty> getEditKpiSubscriptionMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "EditKpiSubscription",
+      requestType = monitoring.Monitoring.SubsDescriptor.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) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getEditKpiSubscriptionMethod = MonitoringServiceGrpc.getEditKpiSubscriptionMethod) == null) {
+          MonitoringServiceGrpc.getEditKpiSubscriptionMethod = getEditKpiSubscriptionMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.SubsDescriptor, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "EditKpiSubscription"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.SubsDescriptor.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("EditKpiSubscription"))
+              .build();
+        }
+      }
+    }
+    return getEditKpiSubscriptionMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmDescriptor,
+      monitoring.Monitoring.AlarmID> getCreateKpiAlarmMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "CreateKpiAlarm",
+      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) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getCreateKpiAlarmMethod = MonitoringServiceGrpc.getCreateKpiAlarmMethod) == null) {
+          MonitoringServiceGrpc.getCreateKpiAlarmMethod = getCreateKpiAlarmMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmDescriptor, monitoring.Monitoring.AlarmID>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "CreateKpiAlarm"))
+              .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"))
+              .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;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.AlarmIDList> getGetAlarmsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetAlarms",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = monitoring.Monitoring.AlarmIDList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      monitoring.Monitoring.AlarmIDList> getGetAlarmsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, monitoring.Monitoring.AlarmIDList> getGetAlarmsMethod;
+    if ((getGetAlarmsMethod = MonitoringServiceGrpc.getGetAlarmsMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetAlarmsMethod = MonitoringServiceGrpc.getGetAlarmsMethod) == null) {
+          MonitoringServiceGrpc.getGetAlarmsMethod = getGetAlarmsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, monitoring.Monitoring.AlarmIDList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarms"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmIDList.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarms"))
               .build();
         }
       }
     }
-    return getGetInstantKpiMethod;
+    return getGetAlarmsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmDescriptor> getGetAlarmDescriptorMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetAlarmDescriptor",
+      requestType = monitoring.Monitoring.AlarmID.class,
+      responseType = monitoring.Monitoring.AlarmDescriptor.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmDescriptor> getGetAlarmDescriptorMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmDescriptor> getGetAlarmDescriptorMethod;
+    if ((getGetAlarmDescriptorMethod = MonitoringServiceGrpc.getGetAlarmDescriptorMethod) == null) {
+      synchronized (MonitoringServiceGrpc.class) {
+        if ((getGetAlarmDescriptorMethod = MonitoringServiceGrpc.getGetAlarmDescriptorMethod) == null) {
+          MonitoringServiceGrpc.getGetAlarmDescriptorMethod = getGetAlarmDescriptorMethod =
+              io.grpc.MethodDescriptor.<monitoring.Monitoring.AlarmID, monitoring.Monitoring.AlarmDescriptor>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmDescriptor"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmDescriptor.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmDescriptor"))
+              .build();
+        }
+      }
+    }
+    return getGetAlarmDescriptorMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetAlarmResponseStream",
+      requestType = monitoring.Monitoring.AlarmID.class,
+      responseType = monitoring.Monitoring.AlarmResponse.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID,
+      monitoring.Monitoring.AlarmResponse> getGetAlarmResponseStreamMethod() {
+    io.grpc.MethodDescriptor<monitoring.Monitoring.AlarmID, 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()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetAlarmResponseStream"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmID.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  monitoring.Monitoring.AlarmResponse.getDefaultInstance()))
+              .setSchemaDescriptor(new MonitoringServiceMethodDescriptorSupplier("GetAlarmResponseStream"))
+              .build();
+        }
+      }
+    }
+    return getGetAlarmResponseStreamMethod;
   }
 
   /**
@@ -255,6 +627,34 @@ public final class MonitoringServiceGrpc {
       io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getCreateKpiMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiDescriptorMethod(), 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 getKpiDescriptorList(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList> responseObserver) {
+      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,
@@ -278,16 +678,72 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetStreamKpiMethod(), responseObserver);
+    public void queryKpiData(monitoring.Monitoring.KpiQuery request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getQueryKpiDataMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSubscribeKpiMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getSubsDescriptor(monitoring.Monitoring.SubscriptionID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSubsDescriptorMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getSubscriptions(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetSubscriptionsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getEditKpiSubscriptionMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void createKpiAlarm(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);
+    }
+
+    /**
+     */
+    public void getAlarms(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarmDescriptor(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmDescriptorMethod(), responseObserver);
     }
 
     /**
      */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
-      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInstantKpiMethod(), responseObserver);
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetAlarmResponseStreamMethod(), responseObserver);
     }
 
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
@@ -299,6 +755,34 @@ public final class MonitoringServiceGrpc {
                 monitoring.Monitoring.KpiDescriptor,
                 monitoring.Monitoring.KpiId>(
                   this, METHODID_CREATE_KPI)))
+          .addMethod(
+            getEditKpiDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.EditedKpiDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_DESCRIPTOR)))
+          .addMethod(
+            getDeleteKpiMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_DELETE_KPI)))
+          .addMethod(
+            getGetKpiDescriptorListMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                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(
@@ -321,19 +805,75 @@ public final class MonitoringServiceGrpc {
                 context.ContextOuterClass.Empty>(
                   this, METHODID_MONITOR_KPI)))
           .addMethod(
-            getGetStreamKpiMethod(),
+            getQueryKpiDataMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.KpiQuery,
+                monitoring.Monitoring.KpiList>(
+                  this, METHODID_QUERY_KPI_DATA)))
+          .addMethod(
+            getSubscribeKpiMethod(),
             io.grpc.stub.ServerCalls.asyncServerStreamingCall(
               new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.Kpi>(
-                  this, METHODID_GET_STREAM_KPI)))
+                monitoring.Monitoring.SubsDescriptor,
+                monitoring.Monitoring.KpiList>(
+                  this, METHODID_SUBSCRIBE_KPI)))
           .addMethod(
-            getGetInstantKpiMethod(),
+            getGetSubsDescriptorMethod(),
             io.grpc.stub.ServerCalls.asyncUnaryCall(
               new MethodHandlers<
-                monitoring.Monitoring.KpiId,
-                monitoring.Monitoring.Kpi>(
-                  this, METHODID_GET_INSTANT_KPI)))
+                monitoring.Monitoring.SubscriptionID,
+                monitoring.Monitoring.SubsDescriptor>(
+                  this, METHODID_GET_SUBS_DESCRIPTOR)))
+          .addMethod(
+            getGetSubscriptionsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                monitoring.Monitoring.SubsIDList>(
+                  this, METHODID_GET_SUBSCRIPTIONS)))
+          .addMethod(
+            getEditKpiSubscriptionMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.SubsDescriptor,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_EDIT_KPI_SUBSCRIPTION)))
+          .addMethod(
+            getCreateKpiAlarmMethod(),
+            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)))
+          .addMethod(
+            getGetAlarmsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                monitoring.Monitoring.AlarmIDList>(
+                  this, METHODID_GET_ALARMS)))
+          .addMethod(
+            getGetAlarmDescriptorMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmID,
+                monitoring.Monitoring.AlarmDescriptor>(
+                  this, METHODID_GET_ALARM_DESCRIPTOR)))
+          .addMethod(
+            getGetAlarmResponseStreamMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                monitoring.Monitoring.AlarmID,
+                monitoring.Monitoring.AlarmResponse>(
+                  this, METHODID_GET_ALARM_RESPONSE_STREAM)))
           .build();
     }
   }
@@ -360,6 +900,38 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
+    /**
+     */
+    public void editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void deleteKpi(monitoring.Monitoring.KpiId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getKpiDescriptorList(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiDescriptorList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          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,
@@ -386,18 +958,82 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public void getStreamKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+    public void queryKpiData(monitoring.Monitoring.KpiQuery request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getQueryKpiDataMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void subscribeKpi(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList> responseObserver) {
       io.grpc.stub.ClientCalls.asyncServerStreamingCall(
-          getChannel().newCall(getGetStreamKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getSubscribeKpiMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void getInstantKpi(monitoring.Monitoring.KpiId request,
-        io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi> responseObserver) {
+    public void getSubsDescriptor(monitoring.Monitoring.SubscriptionID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor> responseObserver) {
       io.grpc.stub.ClientCalls.asyncUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request, responseObserver);
+          getChannel().newCall(getGetSubsDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getSubscriptions(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetSubscriptionsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void editKpiSubscription(monitoring.Monitoring.SubsDescriptor request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getEditKpiSubscriptionMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void createKpiAlarm(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);
+    }
+
+    /**
+     */
+    public void getAlarms(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarmDescriptor(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getAlarmResponseStream(monitoring.Monitoring.AlarmID request,
+        io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetAlarmResponseStreamMethod(), getCallOptions()), request, responseObserver);
     }
   }
 
@@ -422,6 +1058,34 @@ public final class MonitoringServiceGrpc {
           getChannel(), getCreateKpiMethod(), getCallOptions(), request);
     }
 
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty deleteKpi(monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getDeleteKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    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) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getCreateBundleKpiMethod(), getCallOptions(), request);
+    }
+
     /**
      */
     public monitoring.Monitoring.KpiDescriptor getKpiDescriptor(monitoring.Monitoring.KpiId request) {
@@ -445,17 +1109,74 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public java.util.Iterator<monitoring.Monitoring.Kpi> getStreamKpi(
-        monitoring.Monitoring.KpiId request) {
+    public monitoring.Monitoring.KpiList queryKpiData(monitoring.Monitoring.KpiQuery request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getQueryKpiDataMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<monitoring.Monitoring.KpiList> subscribeKpi(
+        monitoring.Monitoring.SubsDescriptor request) {
       return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
-          getChannel(), getGetStreamKpiMethod(), getCallOptions(), request);
+          getChannel(), getSubscribeKpiMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.SubsDescriptor getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetSubsDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.SubsIDList getSubscriptions(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetSubscriptionsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getEditKpiSubscriptionMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.AlarmID createKpiAlarm(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);
     }
 
     /**
      */
-    public monitoring.Monitoring.Kpi getInstantKpi(monitoring.Monitoring.KpiId request) {
+    public monitoring.Monitoring.AlarmIDList getAlarms(context.ContextOuterClass.Empty request) {
       return io.grpc.stub.ClientCalls.blockingUnaryCall(
-          getChannel(), getGetInstantKpiMethod(), getCallOptions(), request);
+          getChannel(), getGetAlarmsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public monitoring.Monitoring.AlarmDescriptor getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetAlarmDescriptorMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(
+        monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetAlarmResponseStreamMethod(), getCallOptions(), request);
     }
   }
 
@@ -481,6 +1202,38 @@ public final class MonitoringServiceGrpc {
           getChannel().newCall(getCreateKpiMethod(), getCallOptions()), request);
     }
 
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiDescriptor(
+        monitoring.Monitoring.EditedKpiDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getEditKpiDescriptorMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteKpi(
+        monitoring.Monitoring.KpiId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getDeleteKpiMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          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(
@@ -507,19 +1260,87 @@ public final class MonitoringServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.Kpi> getInstantKpi(
-        monitoring.Monitoring.KpiId request) {
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.KpiList> queryKpiData(
+        monitoring.Monitoring.KpiQuery request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getQueryKpiDataMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(
+        monitoring.Monitoring.SubscriptionID request) {
       return io.grpc.stub.ClientCalls.futureUnaryCall(
-          getChannel().newCall(getGetInstantKpiMethod(), getCallOptions()), request);
+          getChannel().newCall(getGetSubsDescriptorMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.SubsIDList> getSubscriptions(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetSubscriptionsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    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) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getCreateKpiAlarmMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> editKpiAlarm(
+        monitoring.Monitoring.AlarmDescriptor request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getEditKpiAlarmMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmIDList> getAlarms(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetAlarmsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(
+        monitoring.Monitoring.AlarmID request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetAlarmDescriptorMethod(), getCallOptions()), request);
     }
   }
 
   private static final int METHODID_CREATE_KPI = 0;
-  private static final int METHODID_GET_KPI_DESCRIPTOR = 1;
-  private static final int METHODID_INCLUDE_KPI = 2;
-  private static final int METHODID_MONITOR_KPI = 3;
-  private static final int METHODID_GET_STREAM_KPI = 4;
-  private static final int METHODID_GET_INSTANT_KPI = 5;
+  private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+  private static final int METHODID_DELETE_KPI = 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 class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -542,6 +1363,22 @@ public final class MonitoringServiceGrpc {
           serviceImpl.createKpi((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);
@@ -554,13 +1391,45 @@ public final class MonitoringServiceGrpc {
           serviceImpl.monitorKpi((monitoring.Monitoring.MonitorKpiRequest) 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);
+        case METHODID_QUERY_KPI_DATA:
+          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,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver);
+          break;
+        case METHODID_GET_SUBS_DESCRIPTOR:
+          serviceImpl.getSubsDescriptor((monitoring.Monitoring.SubscriptionID) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor>) responseObserver);
+          break;
+        case METHODID_GET_SUBSCRIPTIONS:
+          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,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_CREATE_KPI_ALARM:
+          serviceImpl.createKpiAlarm((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);
+          break;
+        case METHODID_GET_ALARM_DESCRIPTOR:
+          serviceImpl.getAlarmDescriptor((monitoring.Monitoring.AlarmID) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver);
           break;
-        case METHODID_GET_INSTANT_KPI:
-          serviceImpl.getInstantKpi((monitoring.Monitoring.KpiId) request,
-              (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver);
+        case METHODID_GET_ALARM_RESPONSE_STREAM:
+          serviceImpl.getAlarmResponseStream((monitoring.Monitoring.AlarmID) request,
+              (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver);
           break;
         default:
           throw new AssertionError();
@@ -624,11 +1493,23 @@ public final class MonitoringServiceGrpc {
           serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
               .setSchemaDescriptor(new MonitoringServiceFileDescriptorSupplier())
               .addMethod(getCreateKpiMethod())
+              .addMethod(getEditKpiDescriptorMethod())
+              .addMethod(getDeleteKpiMethod())
+              .addMethod(getGetKpiDescriptorListMethod())
+              .addMethod(getCreateBundleKpiMethod())
               .addMethod(getGetKpiDescriptorMethod())
               .addMethod(getIncludeKpiMethod())
               .addMethod(getMonitorKpiMethod())
-              .addMethod(getGetStreamKpiMethod())
-              .addMethod(getGetInstantKpiMethod())
+              .addMethod(getQueryKpiDataMethod())
+              .addMethod(getSubscribeKpiMethod())
+              .addMethod(getGetSubsDescriptorMethod())
+              .addMethod(getGetSubscriptionsMethod())
+              .addMethod(getEditKpiSubscriptionMethod())
+              .addMethod(getCreateKpiAlarmMethod())
+              .addMethod(getEditKpiAlarmMethod())
+              .addMethod(getGetAlarmsMethod())
+              .addMethod(getGetAlarmDescriptorMethod())
+              .addMethod(getGetAlarmResponseStreamMethod())
               .build();
         }
       }
diff --git a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
index e5157378c1d8d4608d5da2ec0e429fbb2412c175..46f442b743ee176a83a416fe13711beda6baf937 100644
--- a/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
+++ b/src/automation/target/generated-sources/grpc/monitoring/MutinyMonitoringServiceGrpc.java
@@ -41,6 +41,26 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
+        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<context.ContextOuterClass.Empty> deleteKpi(monitoring.Monitoring.KpiId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteKpi);
+        }
+
+        
+        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);
         }
@@ -56,13 +76,53 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInstantKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiList> queryKpiData(monitoring.Monitoring.KpiQuery request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::queryKpiData);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(monitoring.Monitoring.SubscriptionID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getSubsDescriptor);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.SubsIDList> getSubscriptions(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getSubscriptions);
+        }
+
+        
+        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> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::editKpiAlarm);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmIDList> getAlarms(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getAlarms);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
-            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getStreamKpi);
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getAlarmDescriptor);
+        }
+
+        
+        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.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getAlarmResponseStream);
         }
 
     }
@@ -88,6 +148,26 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiDescriptor(monitoring.Monitoring.EditedKpiDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        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<monitoring.Monitoring.KpiDescriptorList> getKpiDescriptorList(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiId> createBundleKpi(monitoring.Monitoring.BundleKpiDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
         public io.smallrye.mutiny.Uni<monitoring.Monitoring.KpiDescriptor> getKpiDescriptor(monitoring.Monitoring.KpiId request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
@@ -103,12 +183,52 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
         }
 
         
-        public io.smallrye.mutiny.Uni<monitoring.Monitoring.Kpi> getInstantKpi(monitoring.Monitoring.KpiId 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<monitoring.Monitoring.SubsDescriptor> getSubsDescriptor(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) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiSubscription(monitoring.Monitoring.SubsDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<monitoring.Monitoring.AlarmID> createKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> editKpiAlarm(monitoring.Monitoring.AlarmDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        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.AlarmDescriptor> getAlarmDescriptor(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
         
-        public io.smallrye.mutiny.Multi<monitoring.Monitoring.Kpi> getStreamKpi(monitoring.Monitoring.KpiId request) {
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.KpiList> subscribeKpi(monitoring.Monitoring.SubsDescriptor request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<monitoring.Monitoring.AlarmResponse> getAlarmResponseStream(monitoring.Monitoring.AlarmID request) {
             throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
         }
 
@@ -121,6 +241,34 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             monitoring.Monitoring.KpiDescriptor,
                                             monitoring.Monitoring.KpiId>(
                                             this, METHODID_CREATE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.EditedKpiDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getDeleteKpiMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_DELETE_KPI, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetKpiDescriptorListMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            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(
@@ -143,29 +291,97 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                                             context.ContextOuterClass.Empty>(
                                             this, METHODID_MONITOR_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetStreamKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getQueryKpiDataMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.KpiQuery,
+                                            monitoring.Monitoring.KpiList>(
+                                            this, METHODID_QUERY_KPI_DATA, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getSubscribeKpiMethod(),
                             asyncServerStreamingCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.Kpi>(
-                                            this, METHODID_GET_STREAM_KPI, compression)))
+                                            monitoring.Monitoring.SubsDescriptor,
+                                            monitoring.Monitoring.KpiList>(
+                                            this, METHODID_SUBSCRIBE_KPI, compression)))
                     .addMethod(
-                            monitoring.MonitoringServiceGrpc.getGetInstantKpiMethod(),
+                            monitoring.MonitoringServiceGrpc.getGetSubsDescriptorMethod(),
                             asyncUnaryCall(
                                     new MethodHandlers<
-                                            monitoring.Monitoring.KpiId,
-                                            monitoring.Monitoring.Kpi>(
-                                            this, METHODID_GET_INSTANT_KPI, compression)))
+                                            monitoring.Monitoring.SubscriptionID,
+                                            monitoring.Monitoring.SubsDescriptor>(
+                                            this, METHODID_GET_SUBS_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetSubscriptionsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            monitoring.Monitoring.SubsIDList>(
+                                            this, METHODID_GET_SUBSCRIPTIONS, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getEditKpiSubscriptionMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.SubsDescriptor,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_EDIT_KPI_SUBSCRIPTION, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getCreateKpiAlarmMethod(),
+                            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)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetAlarmsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            monitoring.Monitoring.AlarmIDList>(
+                                            this, METHODID_GET_ALARMS, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetAlarmDescriptorMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmID,
+                                            monitoring.Monitoring.AlarmDescriptor>(
+                                            this, METHODID_GET_ALARM_DESCRIPTOR, compression)))
+                    .addMethod(
+                            monitoring.MonitoringServiceGrpc.getGetAlarmResponseStreamMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            monitoring.Monitoring.AlarmID,
+                                            monitoring.Monitoring.AlarmResponse>(
+                                            this, METHODID_GET_ALARM_RESPONSE_STREAM, compression)))
                     .build();
         }
     }
 
     private static final int METHODID_CREATE_KPI = 0;
-    private static final int METHODID_GET_KPI_DESCRIPTOR = 1;
-    private static final int METHODID_INCLUDE_KPI = 2;
-    private static final int METHODID_MONITOR_KPI = 3;
-    private static final int METHODID_GET_STREAM_KPI = 4;
-    private static final int METHODID_GET_INSTANT_KPI = 5;
+    private static final int METHODID_EDIT_KPI_DESCRIPTOR = 1;
+    private static final int METHODID_DELETE_KPI = 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 class MethodHandlers<Req, Resp> implements
             io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -192,6 +408,30 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             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);
+                    break;
+                case METHODID_DELETE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            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,
@@ -210,17 +450,65 @@ public final class MutinyMonitoringServiceGrpc implements io.quarkus.grpc.runtim
                             compression,
                             serviceImpl::monitorKpi);
                     break;
-                case METHODID_GET_STREAM_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
+                case METHODID_QUERY_KPI_DATA:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiQuery) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
                             compression,
-                            serviceImpl::getStreamKpi);
+                            serviceImpl::queryKpiData);
                     break;
-                case METHODID_GET_INSTANT_KPI:
-                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.KpiId) request,
-                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.Kpi>) responseObserver,
+                case METHODID_SUBSCRIBE_KPI:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.SubsDescriptor) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.KpiList>) responseObserver,
+                            compression,
+                            serviceImpl::subscribeKpi);
+                    break;
+                case METHODID_GET_SUBS_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubscriptionID) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getSubsDescriptor);
+                    break;
+                case METHODID_GET_SUBSCRIPTIONS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.SubsIDList>) responseObserver,
+                            compression,
+                            serviceImpl::getSubscriptions);
+                    break;
+                case METHODID_EDIT_KPI_SUBSCRIPTION:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.SubsDescriptor) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::editKpiSubscription);
+                    break;
+                case METHODID_CREATE_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);
+                    break;
+                case METHODID_GET_ALARMS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmIDList>) responseObserver,
+                            compression,
+                            serviceImpl::getAlarms);
+                    break;
+                case METHODID_GET_ALARM_DESCRIPTOR:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((monitoring.Monitoring.AlarmID) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmDescriptor>) responseObserver,
+                            compression,
+                            serviceImpl::getAlarmDescriptor);
+                    break;
+                case METHODID_GET_ALARM_RESPONSE_STREAM:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((monitoring.Monitoring.AlarmID) request,
+                            (io.grpc.stub.StreamObserver<monitoring.Monitoring.AlarmResponse>) responseObserver,
                             compression,
-                            serviceImpl::getInstantKpi);
+                            serviceImpl::getAlarmResponseStream);
                     break;
                 default:
                     throw new java.lang.AssertionError();
diff --git a/src/automation/target/kubernetes/kubernetes.yml b/src/automation/target/kubernetes/kubernetes.yml
index d494e82f18a77d85b696d865270eac7923f6cc7c..5fa64eaa3ff3f5f32659f226ee892ec78f5eedd2 100644
--- a/src/automation/target/kubernetes/kubernetes.yml
+++ b/src/automation/target/kubernetes/kubernetes.yml
@@ -3,20 +3,20 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:57:09 +0000
+    app.quarkus.io/commit-id: cc97cda43489c948a3267ddcb2833ae67f5880cc
+    app.quarkus.io/build-timestamp: 2022-07-22 - 11:36:51 +0000
   labels:
     app.kubernetes.io/name: automationservice
     app: automationservice
   name: automationservice
 spec:
   ports:
-    - name: http
-      port: 8080
-      targetPort: 8080
     - name: grpc
       port: 5050
       targetPort: 5050
+    - name: http
+      port: 8080
+      targetPort: 8080
   selector:
     app.kubernetes.io/name: automationservice
   type: ClusterIP
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:57:09 +0000
+    app.quarkus.io/commit-id: cc97cda43489c948a3267ddcb2833ae67f5880cc
+    app.quarkus.io/build-timestamp: 2022-07-22 - 11:36:51 +0000
   labels:
     app: automationservice
     app.kubernetes.io/name: automationservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-        app.quarkus.io/build-timestamp: 2022-07-14 - 07:57:09 +0000
+        app.quarkus.io/commit-id: cc97cda43489c948a3267ddcb2833ae67f5880cc
+        app.quarkus.io/build-timestamp: 2022-07-22 - 11:36:51 +0000
       labels:
         app: automationservice
         app.kubernetes.io/name: automationservice
@@ -69,12 +69,12 @@ spec:
             timeoutSeconds: 10
           name: automationservice
           ports:
-            - containerPort: 8080
-              name: http
-              protocol: TCP
             - containerPort: 5050
               name: grpc
               protocol: TCP
+            - containerPort: 8080
+              name: http
+              protocol: TCP
           readinessProbe:
             failureThreshold: 3
             httpGet:
diff --git a/src/compute/.gitlab-ci.yml b/src/compute/.gitlab-ci.yml
index 9cbc2b03f9b3d553fea75bde3fdc9fc03d95d229..52b36e8196822c35503f3e644a0d57691fc5f5f0 100644
--- a/src/compute/.gitlab-ci.yml
+++ b/src/compute/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build compute:
   variables:
     IMAGE_NAME: 'compute' # name of the microservice
diff --git a/src/compute/requirements.in b/src/compute/requirements.in
index af1ed2a2856a7be38393c034310e74f69ad7b558..906615e54488056e3f8e8801bbfd333eab1c23b7 100644
--- a/src/compute/requirements.in
+++ b/src/compute/requirements.in
@@ -1,4 +1,4 @@
-Flask==2.0.2
+Flask==2.1.3
 Flask-HTTPAuth==4.5.0
 Flask-RESTful==0.3.9
 jsonschema==4.4.0
diff --git a/src/context/.gitlab-ci.yml b/src/context/.gitlab-ci.yml
index 8f112e690cd51b4bec1c8a9652ddfc3e489fddd1..0da2b582edf879f793341887adef9cef5ad4fff2 100644
--- a/src/context/.gitlab-ci.yml
+++ b/src/context/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build context:
   variables:
     IMAGE_NAME: 'context' # name of the microservice
diff --git a/src/context/requirements.in b/src/context/requirements.in
index 83193ae7012c81881dbbb0412878cd759252f65e..9cc7e71f2428fbb42693f47c911340e5f3f2dbc1 100644
--- a/src/context/requirements.in
+++ b/src/context/requirements.in
@@ -1,4 +1,4 @@
-Flask==2.0.2
+Flask==2.1.3
 Flask-RESTful==0.3.9
 redis==4.1.2
 requests==2.27.1
diff --git a/src/device/.gitlab-ci.yml b/src/device/.gitlab-ci.yml
index cb6750d6b215c84a139a6630ae19762e7813fc0c..3da19e7a38c9659fb8c86afd7beaefc7e08a6d7c 100644
--- a/src/device/.gitlab-ci.yml
+++ b/src/device/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build device:
   variables:
     IMAGE_NAME: 'device' # name of the microservice
diff --git a/src/interdomain/.gitlab-ci.yml b/src/interdomain/.gitlab-ci.yml
index 6aa2849f75ff225fc78d8693003bb8348b89adbf..23bad6cf3b604b6134325b72316d036a9e53b6fc 100644
--- a/src/interdomain/.gitlab-ci.yml
+++ b/src/interdomain/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build interdomain:
   variables:
     IMAGE_NAME: 'interdomain' # name of the microservice
diff --git a/src/l3_attackmitigator/.gitlab-ci.yml b/src/l3_attackmitigator/.gitlab-ci.yml
index 28d5ad4cf109cd438da2625a08689b327688ea37..bcad35c74b3ca2f427b54831f313db855657c821 100644
--- a/src/l3_attackmitigator/.gitlab-ci.yml
+++ b/src/l3_attackmitigator/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag, and push the Docker images to the GitLab Docker registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build l3_attackmitigator:
   variables:
     IMAGE_NAME: 'l3_attackmitigator' # name of the microservice
@@ -21,22 +21,24 @@ build l3_attackmitigator:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
-# Pull, execute, and run unitary tests for the Docker image from the GitLab registry
+# Apply unit test to the component
 unit test l3_attackmitigator:
   variables:
     IMAGE_NAME: 'l3_attackmitigator' # name of the microservice
@@ -46,7 +48,7 @@ unit test l3_attackmitigator:
     - build l3_attackmitigator
   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 network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; 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"
@@ -62,8 +64,10 @@ unit test l3_attackmitigator:
     - 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)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
diff --git a/src/l3_attackmitigator/Dockerfile b/src/l3_attackmitigator/Dockerfile
index 2ed76a70b6ca0e2a140cb926b3343aab7fed37a5..4ff9a4cdce58b0c31f5774d9663d3be257d1bd6a 100644
--- a/src/l3_attackmitigator/Dockerfile
+++ b/src/l3_attackmitigator/Dockerfile
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:3-slim
+FROM python:3.9-slim
 
 # Install dependencies
 RUN apt-get --yes --quiet --quiet update && \
@@ -28,22 +28,41 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
 
-# Set working directory
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
 WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
 
-# Create module sub-folders
-RUN mkdir -p /var/teraflow/l3_attackmitigator
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
 
-# Get Python packages per module
-COPY l3_attackmitigator/requirements.in l3_attackmitigator/requirements.in
-RUN pip-compile --output-file=l3_attackmitigator/requirements.txt l3_attackmitigator/requirements.in
-RUN python3 -m pip install -r l3_attackmitigator/requirements.in
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/l3_attackmitigator
+WORKDIR /var/teraflow/l3_attackmitigator
+COPY src/l3_attackmitigator/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
 
-# Add files into working directory
-COPY common/. common
+# Add component files into working directory
+WORKDIR /var/teraflow
 COPY l3_attackmitigator/. l3_attackmitigator
 
-# Start service service
+# Start the service
 ENTRYPOINT ["python", "-m", "l3_attackmitigator.service"]
diff --git a/src/l3_attackmitigator/client/l3_attackmitigatorClient.py b/src/l3_attackmitigator/client/l3_attackmitigatorClient.py
index ba061c15d7f27383aefec63a92b15557d803fb80..77e09a2f718fb7d0748666842117f60652bebdea 100644
--- a/src/l3_attackmitigator/client/l3_attackmitigatorClient.py
+++ b/src/l3_attackmitigator/client/l3_attackmitigatorClient.py
@@ -14,10 +14,10 @@
 
 import grpc, logging
 from common.tools.client.RetryDecorator import retry, delay_exponential
-from l3_attackmitigator.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     L3AttackmitigatorStub,
 )
-from l3_attackmitigator.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     Output,
     EmptyMitigator
 )
diff --git a/src/l3_attackmitigator/genproto.sh b/src/l3_attackmitigator/genproto.sh
deleted file mode 100755
index c69f7d0250f287259a68b6663bd7b46b8137f6dd..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/genproto.sh
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/bin/bash -eu
-#
-# 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.
-
-# Make folder containing the script the root folder for its execution
-cd $(dirname $0)
-
-rm -rf proto/*.py
-rm -rf proto/__pycache__
-tee proto/__init__.py << EOF > /dev/null
-# 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.
-
-EOF
-
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto context.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto kpi_sample_types.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_attackmitigator.proto
-
-rm proto/context_pb2_grpc.py
-rm proto/kpi_sample_types_pb2_grpc.py
-
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/context_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/kpi_sample_types_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_attackmitigator_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_attackmitigator_pb2_grpc.py
diff --git a/src/l3_attackmitigator/proto/__init__.py b/src/l3_attackmitigator/proto/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# 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/l3_attackmitigator/proto/context_pb2.py b/src/l3_attackmitigator/proto/context_pb2.py
deleted file mode 100644
index 50d501d3ac053ad644554331af26e3c40cd426a1..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/context_pb2.py
+++ /dev/null
@@ -1,3071 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: context.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import kpi_sample_types_pb2 as kpi__sample__types__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='context.proto',
-  package='context',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\rcontext.proto\x12\x07\x63ontext\x1a\x16kpi_sample_types.proto\"\x07\n\x05\x45mpty\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"F\n\x05\x45vent\x12\x11\n\ttimestamp\x18\x01 \x01(\x01\x12*\n\nevent_type\x18\x02 \x01(\x0e\x32\x16.context.EventTypeEnum\"0\n\tContextId\x12#\n\x0c\x63ontext_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xb6\x01\n\x07\x43ontext\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12)\n\x0ctopology_ids\x18\x02 \x03(\x0b\x32\x13.context.TopologyId\x12\'\n\x0bservice_ids\x18\x03 \x03(\x0b\x32\x12.context.ServiceId\x12/\n\ncontroller\x18\x04 \x01(\x0b\x32\x1b.context.TeraFlowController\"8\n\rContextIdList\x12\'\n\x0b\x63ontext_ids\x18\x01 \x03(\x0b\x32\x12.context.ContextId\"1\n\x0b\x43ontextList\x12\"\n\x08\x63ontexts\x18\x01 \x03(\x0b\x32\x10.context.Context\"U\n\x0c\x43ontextEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\ncontext_id\x18\x02 \x01(\x0b\x32\x12.context.ContextId\"Z\n\nTopologyId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12$\n\rtopology_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"~\n\x08Topology\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12%\n\ndevice_ids\x18\x02 \x03(\x0b\x32\x11.context.DeviceId\x12!\n\x08link_ids\x18\x03 \x03(\x0b\x32\x0f.context.LinkId\";\n\x0eTopologyIdList\x12)\n\x0ctopology_ids\x18\x01 \x03(\x0b\x32\x13.context.TopologyId\"5\n\x0cTopologyList\x12%\n\ntopologies\x18\x01 \x03(\x0b\x32\x11.context.Topology\"X\n\rTopologyEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12(\n\x0btopology_id\x18\x02 \x01(\x0b\x32\x13.context.TopologyId\".\n\x08\x44\x65viceId\x12\"\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x9a\x02\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12G\n\x19\x64\x65vice_operational_status\x18\x04 \x01(\x0e\x32$.context.DeviceOperationalStatusEnum\x12\x31\n\x0e\x64\x65vice_drivers\x18\x05 \x03(\x0e\x32\x19.context.DeviceDriverEnum\x12+\n\x10\x64\x65vice_endpoints\x18\x06 \x03(\x0b\x32\x11.context.EndPoint\"9\n\x0c\x44\x65viceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"5\n\x0c\x44\x65viceIdList\x12%\n\ndevice_ids\x18\x01 \x03(\x0b\x32\x11.context.DeviceId\".\n\nDeviceList\x12 \n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x0f.context.Device\"R\n\x0b\x44\x65viceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"*\n\x06LinkId\x12 \n\tlink_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"X\n\x04Link\x12 \n\x07link_id\x18\x01 \x01(\x0b\x32\x0f.context.LinkId\x12.\n\x11link_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\"/\n\nLinkIdList\x12!\n\x08link_ids\x18\x01 \x03(\x0b\x32\x0f.context.LinkId\"(\n\x08LinkList\x12\x1c\n\x05links\x18\x01 \x03(\x0b\x32\r.context.Link\"L\n\tLinkEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12 \n\x07link_id\x18\x02 \x01(\x0b\x32\x0f.context.LinkId\"X\n\tServiceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12#\n\x0cservice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\xa6\x02\n\x07Service\x12&\n\nservice_id\x18\x01 \x01(\x0b\x32\x12.context.ServiceId\x12.\n\x0cservice_type\x18\x02 \x01(\x0e\x32\x18.context.ServiceTypeEnum\x12\x31\n\x14service_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12\x30\n\x13service_constraints\x18\x04 \x03(\x0b\x32\x13.context.Constraint\x12.\n\x0eservice_status\x18\x05 \x01(\x0b\x32\x16.context.ServiceStatus\x12.\n\x0eservice_config\x18\x06 \x01(\x0b\x32\x16.context.ServiceConfig\"C\n\rServiceStatus\x12\x32\n\x0eservice_status\x18\x01 \x01(\x0e\x32\x1a.context.ServiceStatusEnum\":\n\rServiceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"8\n\rServiceIdList\x12\'\n\x0bservice_ids\x18\x01 \x03(\x0b\x32\x12.context.ServiceId\"1\n\x0bServiceList\x12\"\n\x08services\x18\x01 \x03(\x0b\x32\x10.context.Service\"U\n\x0cServiceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\"T\n\x07SliceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12!\n\nslice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\x95\x02\n\x05Slice\x12\"\n\x08slice_id\x18\x01 \x01(\x0b\x32\x10.context.SliceId\x12/\n\x12slice_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\x12.\n\x11slice_constraints\x18\x03 \x03(\x0b\x32\x13.context.Constraint\x12-\n\x11slice_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\x12,\n\x12slice_subslice_ids\x18\x05 \x03(\x0b\x32\x10.context.SliceId\x12*\n\x0cslice_status\x18\x06 \x01(\x0b\x32\x14.context.SliceStatus\"=\n\x0bSliceStatus\x12.\n\x0cslice_status\x18\x01 \x01(\x0e\x32\x18.context.SliceStatusEnum\"2\n\x0bSliceIdList\x12#\n\tslice_ids\x18\x01 \x03(\x0b\x32\x10.context.SliceId\"+\n\tSliceList\x12\x1e\n\x06slices\x18\x01 \x03(\x0b\x32\x0e.context.Slice\"O\n\nSliceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12\"\n\x08slice_id\x18\x02 \x01(\x0b\x32\x10.context.SliceId\"6\n\x0c\x43onnectionId\x12&\n\x0f\x63onnection_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xc4\x01\n\nConnection\x12,\n\rconnection_id\x18\x01 \x01(\x0b\x32\x15.context.ConnectionId\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\x12\x33\n\x16path_hops_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12+\n\x0fsub_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\"A\n\x10\x43onnectionIdList\x12-\n\x0e\x63onnection_ids\x18\x01 \x03(\x0b\x32\x15.context.ConnectionId\":\n\x0e\x43onnectionList\x12(\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\x13.context.Connection\"^\n\x0f\x43onnectionEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12,\n\rconnection_id\x18\x02 \x01(\x0b\x32\x15.context.ConnectionId\"\x82\x01\n\nEndPointId\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12$\n\rendpoint_uuid\x18\x03 \x01(\x0b\x32\r.context.Uuid\"\x86\x01\n\x08\x45ndPoint\x12(\n\x0b\x65ndpoint_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x15\n\rendpoint_type\x18\x02 \x01(\t\x12\x39\n\x10kpi_sample_types\x18\x03 \x03(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\"e\n\nConfigRule\x12)\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x19.context.ConfigActionEnum\x12\x14\n\x0cresource_key\x18\x02 \x01(\t\x12\x16\n\x0eresource_value\x18\x03 \x01(\t\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"^\n\x12TeraFlowController\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x12\n\nip_address\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\"U\n\x14\x41uthenticationResult\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*j\n\rEventTypeEnum\x12\x17\n\x13\x45VENTTYPE_UNDEFINED\x10\x00\x12\x14\n\x10\x45VENTTYPE_CREATE\x10\x01\x12\x14\n\x10\x45VENTTYPE_UPDATE\x10\x02\x12\x14\n\x10\x45VENTTYPE_REMOVE\x10\x03*\xc5\x01\n\x10\x44\x65viceDriverEnum\x12\x1a\n\x16\x44\x45VICEDRIVER_UNDEFINED\x10\x00\x12\x1b\n\x17\x44\x45VICEDRIVER_OPENCONFIG\x10\x01\x12\x1e\n\x1a\x44\x45VICEDRIVER_TRANSPORT_API\x10\x02\x12\x13\n\x0f\x44\x45VICEDRIVER_P4\x10\x03\x12&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\x10\x04\x12\x1b\n\x17\x44\x45VICEDRIVER_ONF_TR_352\x10\x05*\x8f\x01\n\x1b\x44\x65viceOperationalStatusEnum\x12%\n!DEVICEOPERATIONALSTATUS_UNDEFINED\x10\x00\x12$\n DEVICEOPERATIONALSTATUS_DISABLED\x10\x01\x12#\n\x1f\x44\x45VICEOPERATIONALSTATUS_ENABLED\x10\x02*\x81\x01\n\x0fServiceTypeEnum\x12\x17\n\x13SERVICETYPE_UNKNOWN\x10\x00\x12\x14\n\x10SERVICETYPE_L3NM\x10\x01\x12\x14\n\x10SERVICETYPE_L2NM\x10\x02\x12)\n%SERVICETYPE_TAPI_CONNECTIVITY_SERVICE\x10\x03*\x88\x01\n\x11ServiceStatusEnum\x12\x1b\n\x17SERVICESTATUS_UNDEFINED\x10\x00\x12\x19\n\x15SERVICESTATUS_PLANNED\x10\x01\x12\x18\n\x14SERVICESTATUS_ACTIVE\x10\x02\x12!\n\x1dSERVICESTATUS_PENDING_REMOVAL\x10\x03*\x8b\x01\n\x0fSliceStatusEnum\x12\x19\n\x15SLICESTATUS_UNDEFINED\x10\x00\x12\x17\n\x13SLICESTATUS_PLANNED\x10\x01\x12\x14\n\x10SLICESTATUS_INIT\x10\x02\x12\x16\n\x12SLICESTATUS_ACTIVE\x10\x03\x12\x16\n\x12SLICESTATUS_DEINIT\x10\x04*]\n\x10\x43onfigActionEnum\x12\x1a\n\x16\x43ONFIGACTION_UNDEFINED\x10\x00\x12\x14\n\x10\x43ONFIGACTION_SET\x10\x01\x12\x17\n\x13\x43ONFIGACTION_DELETE\x10\x02\x32\xef\x12\n\x0e\x43ontextService\x12:\n\x0eListContextIds\x12\x0e.context.Empty\x1a\x16.context.ContextIdList\"\x00\x12\x36\n\x0cListContexts\x12\x0e.context.Empty\x1a\x14.context.ContextList\"\x00\x12\x34\n\nGetContext\x12\x12.context.ContextId\x1a\x10.context.Context\"\x00\x12\x34\n\nSetContext\x12\x10.context.Context\x1a\x12.context.ContextId\"\x00\x12\x35\n\rRemoveContext\x12\x12.context.ContextId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetContextEvents\x12\x0e.context.Empty\x1a\x15.context.ContextEvent\"\x00\x30\x01\x12@\n\x0fListTopologyIds\x12\x12.context.ContextId\x1a\x17.context.TopologyIdList\"\x00\x12=\n\x0eListTopologies\x12\x12.context.ContextId\x1a\x15.context.TopologyList\"\x00\x12\x37\n\x0bGetTopology\x12\x13.context.TopologyId\x1a\x11.context.Topology\"\x00\x12\x37\n\x0bSetTopology\x12\x11.context.Topology\x1a\x13.context.TopologyId\"\x00\x12\x37\n\x0eRemoveTopology\x12\x13.context.TopologyId\x1a\x0e.context.Empty\"\x00\x12?\n\x11GetTopologyEvents\x12\x0e.context.Empty\x1a\x16.context.TopologyEvent\"\x00\x30\x01\x12\x38\n\rListDeviceIds\x12\x0e.context.Empty\x1a\x15.context.DeviceIdList\"\x00\x12\x34\n\x0bListDevices\x12\x0e.context.Empty\x1a\x13.context.DeviceList\"\x00\x12\x31\n\tGetDevice\x12\x11.context.DeviceId\x1a\x0f.context.Device\"\x00\x12\x31\n\tSetDevice\x12\x0f.context.Device\x1a\x11.context.DeviceId\"\x00\x12\x33\n\x0cRemoveDevice\x12\x11.context.DeviceId\x1a\x0e.context.Empty\"\x00\x12;\n\x0fGetDeviceEvents\x12\x0e.context.Empty\x1a\x14.context.DeviceEvent\"\x00\x30\x01\x12\x34\n\x0bListLinkIds\x12\x0e.context.Empty\x1a\x13.context.LinkIdList\"\x00\x12\x30\n\tListLinks\x12\x0e.context.Empty\x1a\x11.context.LinkList\"\x00\x12+\n\x07GetLink\x12\x0f.context.LinkId\x1a\r.context.Link\"\x00\x12+\n\x07SetLink\x12\r.context.Link\x1a\x0f.context.LinkId\"\x00\x12/\n\nRemoveLink\x12\x0f.context.LinkId\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetLinkEvents\x12\x0e.context.Empty\x1a\x12.context.LinkEvent\"\x00\x30\x01\x12>\n\x0eListServiceIds\x12\x12.context.ContextId\x1a\x16.context.ServiceIdList\"\x00\x12:\n\x0cListServices\x12\x12.context.ContextId\x1a\x14.context.ServiceList\"\x00\x12\x34\n\nGetService\x12\x12.context.ServiceId\x1a\x10.context.Service\"\x00\x12\x34\n\nSetService\x12\x10.context.Service\x1a\x12.context.ServiceId\"\x00\x12\x35\n\rRemoveService\x12\x12.context.ServiceId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetServiceEvents\x12\x0e.context.Empty\x1a\x15.context.ServiceEvent\"\x00\x30\x01\x12:\n\x0cListSliceIds\x12\x12.context.ContextId\x1a\x14.context.SliceIdList\"\x00\x12\x36\n\nListSlices\x12\x12.context.ContextId\x1a\x12.context.SliceList\"\x00\x12.\n\x08GetSlice\x12\x10.context.SliceId\x1a\x0e.context.Slice\"\x00\x12.\n\x08SetSlice\x12\x0e.context.Slice\x1a\x10.context.SliceId\"\x00\x12\x31\n\x0bRemoveSlice\x12\x10.context.SliceId\x1a\x0e.context.Empty\"\x00\x12\x39\n\x0eGetSliceEvents\x12\x0e.context.Empty\x1a\x13.context.SliceEvent\"\x00\x30\x01\x12\x44\n\x11ListConnectionIds\x12\x12.context.ServiceId\x1a\x19.context.ConnectionIdList\"\x00\x12@\n\x0fListConnections\x12\x12.context.ServiceId\x1a\x17.context.ConnectionList\"\x00\x12=\n\rGetConnection\x12\x15.context.ConnectionId\x1a\x13.context.Connection\"\x00\x12=\n\rSetConnection\x12\x13.context.Connection\x1a\x15.context.ConnectionId\"\x00\x12;\n\x10RemoveConnection\x12\x15.context.ConnectionId\x1a\x0e.context.Empty\"\x00\x12\x43\n\x13GetConnectionEvents\x12\x0e.context.Empty\x1a\x18.context.ConnectionEvent\"\x00\x30\x01\x62\x06proto3'
-  ,
-  dependencies=[kpi__sample__types__pb2.DESCRIPTOR,])
-
-_EVENTTYPEENUM = _descriptor.EnumDescriptor(
-  name='EventTypeEnum',
-  full_name='context.EventTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_CREATE', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UPDATE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_REMOVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4310,
-  serialized_end=4416,
-)
-_sym_db.RegisterEnumDescriptor(_EVENTTYPEENUM)
-
-EventTypeEnum = enum_type_wrapper.EnumTypeWrapper(_EVENTTYPEENUM)
-_DEVICEDRIVERENUM = _descriptor.EnumDescriptor(
-  name='DeviceDriverEnum',
-  full_name='context.DeviceDriverEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_OPENCONFIG', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_TRANSPORT_API', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_P4', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_IETF_NETWORK_TOPOLOGY', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_ONF_TR_352', index=5, number=5,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4419,
-  serialized_end=4616,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEDRIVERENUM)
-
-DeviceDriverEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEDRIVERENUM)
-_DEVICEOPERATIONALSTATUSENUM = _descriptor.EnumDescriptor(
-  name='DeviceOperationalStatusEnum',
-  full_name='context.DeviceOperationalStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_DISABLED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_ENABLED', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4619,
-  serialized_end=4762,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEOPERATIONALSTATUSENUM)
-
-DeviceOperationalStatusEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEOPERATIONALSTATUSENUM)
-_SERVICETYPEENUM = _descriptor.EnumDescriptor(
-  name='ServiceTypeEnum',
-  full_name='context.ServiceTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L3NM', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L2NM', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_TAPI_CONNECTIVITY_SERVICE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4765,
-  serialized_end=4894,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICETYPEENUM)
-
-ServiceTypeEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICETYPEENUM)
-_SERVICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='ServiceStatusEnum',
-  full_name='context.ServiceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_ACTIVE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PENDING_REMOVAL', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4897,
-  serialized_end=5033,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICESTATUSENUM)
-
-ServiceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICESTATUSENUM)
-_SLICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='SliceStatusEnum',
-  full_name='context.SliceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_INIT', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_ACTIVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_DEINIT', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5036,
-  serialized_end=5175,
-)
-_sym_db.RegisterEnumDescriptor(_SLICESTATUSENUM)
-
-SliceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SLICESTATUSENUM)
-_CONFIGACTIONENUM = _descriptor.EnumDescriptor(
-  name='ConfigActionEnum',
-  full_name='context.ConfigActionEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_SET', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_DELETE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5177,
-  serialized_end=5270,
-)
-_sym_db.RegisterEnumDescriptor(_CONFIGACTIONENUM)
-
-ConfigActionEnum = enum_type_wrapper.EnumTypeWrapper(_CONFIGACTIONENUM)
-EVENTTYPE_UNDEFINED = 0
-EVENTTYPE_CREATE = 1
-EVENTTYPE_UPDATE = 2
-EVENTTYPE_REMOVE = 3
-DEVICEDRIVER_UNDEFINED = 0
-DEVICEDRIVER_OPENCONFIG = 1
-DEVICEDRIVER_TRANSPORT_API = 2
-DEVICEDRIVER_P4 = 3
-DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4
-DEVICEDRIVER_ONF_TR_352 = 5
-DEVICEOPERATIONALSTATUS_UNDEFINED = 0
-DEVICEOPERATIONALSTATUS_DISABLED = 1
-DEVICEOPERATIONALSTATUS_ENABLED = 2
-SERVICETYPE_UNKNOWN = 0
-SERVICETYPE_L3NM = 1
-SERVICETYPE_L2NM = 2
-SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3
-SERVICESTATUS_UNDEFINED = 0
-SERVICESTATUS_PLANNED = 1
-SERVICESTATUS_ACTIVE = 2
-SERVICESTATUS_PENDING_REMOVAL = 3
-SLICESTATUS_UNDEFINED = 0
-SLICESTATUS_PLANNED = 1
-SLICESTATUS_INIT = 2
-SLICESTATUS_ACTIVE = 3
-SLICESTATUS_DEINIT = 4
-CONFIGACTION_UNDEFINED = 0
-CONFIGACTION_SET = 1
-CONFIGACTION_DELETE = 2
-
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='context.Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=50,
-  serialized_end=57,
-)
-
-
-_UUID = _descriptor.Descriptor(
-  name='Uuid',
-  full_name='context.Uuid',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='uuid', full_name='context.Uuid.uuid', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=59,
-  serialized_end=79,
-)
-
-
-_EVENT = _descriptor.Descriptor(
-  name='Event',
-  full_name='context.Event',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='context.Event.timestamp', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='event_type', full_name='context.Event.event_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=81,
-  serialized_end=151,
-)
-
-
-_CONTEXTID = _descriptor.Descriptor(
-  name='ContextId',
-  full_name='context.ContextId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_uuid', full_name='context.ContextId.context_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=153,
-  serialized_end=201,
-)
-
-
-_CONTEXT = _descriptor.Descriptor(
-  name='Context',
-  full_name='context.Context',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.Context.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.Context.topology_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.Context.service_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='controller', full_name='context.Context.controller', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=204,
-  serialized_end=386,
-)
-
-
-_CONTEXTIDLIST = _descriptor.Descriptor(
-  name='ContextIdList',
-  full_name='context.ContextIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_ids', full_name='context.ContextIdList.context_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=388,
-  serialized_end=444,
-)
-
-
-_CONTEXTLIST = _descriptor.Descriptor(
-  name='ContextList',
-  full_name='context.ContextList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='contexts', full_name='context.ContextList.contexts', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=446,
-  serialized_end=495,
-)
-
-
-_CONTEXTEVENT = _descriptor.Descriptor(
-  name='ContextEvent',
-  full_name='context.ContextEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ContextEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ContextEvent.context_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=497,
-  serialized_end=582,
-)
-
-
-_TOPOLOGYID = _descriptor.Descriptor(
-  name='TopologyId',
-  full_name='context.TopologyId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TopologyId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_uuid', full_name='context.TopologyId.topology_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=584,
-  serialized_end=674,
-)
-
-
-_TOPOLOGY = _descriptor.Descriptor(
-  name='Topology',
-  full_name='context.Topology',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.Topology.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.Topology.device_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.Topology.link_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=676,
-  serialized_end=802,
-)
-
-
-_TOPOLOGYIDLIST = _descriptor.Descriptor(
-  name='TopologyIdList',
-  full_name='context.TopologyIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.TopologyIdList.topology_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=804,
-  serialized_end=863,
-)
-
-
-_TOPOLOGYLIST = _descriptor.Descriptor(
-  name='TopologyList',
-  full_name='context.TopologyList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topologies', full_name='context.TopologyList.topologies', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=865,
-  serialized_end=918,
-)
-
-
-_TOPOLOGYEVENT = _descriptor.Descriptor(
-  name='TopologyEvent',
-  full_name='context.TopologyEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.TopologyEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.TopologyEvent.topology_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=920,
-  serialized_end=1008,
-)
-
-
-_DEVICEID = _descriptor.Descriptor(
-  name='DeviceId',
-  full_name='context.DeviceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_uuid', full_name='context.DeviceId.device_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1010,
-  serialized_end=1056,
-)
-
-
-_DEVICE = _descriptor.Descriptor(
-  name='Device',
-  full_name='context.Device',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.Device.device_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_type', full_name='context.Device.device_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_config', full_name='context.Device.device_config', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_operational_status', full_name='context.Device.device_operational_status', index=3,
-      number=4, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_drivers', full_name='context.Device.device_drivers', index=4,
-      number=5, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_endpoints', full_name='context.Device.device_endpoints', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1059,
-  serialized_end=1341,
-)
-
-
-_DEVICECONFIG = _descriptor.Descriptor(
-  name='DeviceConfig',
-  full_name='context.DeviceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.DeviceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1343,
-  serialized_end=1400,
-)
-
-
-_DEVICEIDLIST = _descriptor.Descriptor(
-  name='DeviceIdList',
-  full_name='context.DeviceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.DeviceIdList.device_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1402,
-  serialized_end=1455,
-)
-
-
-_DEVICELIST = _descriptor.Descriptor(
-  name='DeviceList',
-  full_name='context.DeviceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='devices', full_name='context.DeviceList.devices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1457,
-  serialized_end=1503,
-)
-
-
-_DEVICEEVENT = _descriptor.Descriptor(
-  name='DeviceEvent',
-  full_name='context.DeviceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.DeviceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.DeviceEvent.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1505,
-  serialized_end=1587,
-)
-
-
-_LINKID = _descriptor.Descriptor(
-  name='LinkId',
-  full_name='context.LinkId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_uuid', full_name='context.LinkId.link_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1589,
-  serialized_end=1631,
-)
-
-
-_LINK = _descriptor.Descriptor(
-  name='Link',
-  full_name='context.Link',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.Link.link_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_endpoint_ids', full_name='context.Link.link_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1633,
-  serialized_end=1721,
-)
-
-
-_LINKIDLIST = _descriptor.Descriptor(
-  name='LinkIdList',
-  full_name='context.LinkIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.LinkIdList.link_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1723,
-  serialized_end=1770,
-)
-
-
-_LINKLIST = _descriptor.Descriptor(
-  name='LinkList',
-  full_name='context.LinkList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='links', full_name='context.LinkList.links', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1772,
-  serialized_end=1812,
-)
-
-
-_LINKEVENT = _descriptor.Descriptor(
-  name='LinkEvent',
-  full_name='context.LinkEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.LinkEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.LinkEvent.link_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1814,
-  serialized_end=1890,
-)
-
-
-_SERVICEID = _descriptor.Descriptor(
-  name='ServiceId',
-  full_name='context.ServiceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ServiceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_uuid', full_name='context.ServiceId.service_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1892,
-  serialized_end=1980,
-)
-
-
-_SERVICE = _descriptor.Descriptor(
-  name='Service',
-  full_name='context.Service',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Service.service_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_type', full_name='context.Service.service_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_endpoint_ids', full_name='context.Service.service_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_constraints', full_name='context.Service.service_constraints', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.Service.service_status', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_config', full_name='context.Service.service_config', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1983,
-  serialized_end=2277,
-)
-
-
-_SERVICESTATUS = _descriptor.Descriptor(
-  name='ServiceStatus',
-  full_name='context.ServiceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.ServiceStatus.service_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2279,
-  serialized_end=2346,
-)
-
-
-_SERVICECONFIG = _descriptor.Descriptor(
-  name='ServiceConfig',
-  full_name='context.ServiceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.ServiceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2348,
-  serialized_end=2406,
-)
-
-
-_SERVICEIDLIST = _descriptor.Descriptor(
-  name='ServiceIdList',
-  full_name='context.ServiceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.ServiceIdList.service_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2408,
-  serialized_end=2464,
-)
-
-
-_SERVICELIST = _descriptor.Descriptor(
-  name='ServiceList',
-  full_name='context.ServiceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='services', full_name='context.ServiceList.services', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2466,
-  serialized_end=2515,
-)
-
-
-_SERVICEEVENT = _descriptor.Descriptor(
-  name='ServiceEvent',
-  full_name='context.ServiceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ServiceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.ServiceEvent.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2517,
-  serialized_end=2602,
-)
-
-
-_SLICEID = _descriptor.Descriptor(
-  name='SliceId',
-  full_name='context.SliceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.SliceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_uuid', full_name='context.SliceId.slice_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2604,
-  serialized_end=2688,
-)
-
-
-_SLICE = _descriptor.Descriptor(
-  name='Slice',
-  full_name='context.Slice',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.Slice.slice_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_endpoint_ids', full_name='context.Slice.slice_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_constraints', full_name='context.Slice.slice_constraints', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_service_ids', full_name='context.Slice.slice_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_subslice_ids', full_name='context.Slice.slice_subslice_ids', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.Slice.slice_status', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2691,
-  serialized_end=2968,
-)
-
-
-_SLICESTATUS = _descriptor.Descriptor(
-  name='SliceStatus',
-  full_name='context.SliceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.SliceStatus.slice_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2970,
-  serialized_end=3031,
-)
-
-
-_SLICEIDLIST = _descriptor.Descriptor(
-  name='SliceIdList',
-  full_name='context.SliceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_ids', full_name='context.SliceIdList.slice_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3033,
-  serialized_end=3083,
-)
-
-
-_SLICELIST = _descriptor.Descriptor(
-  name='SliceList',
-  full_name='context.SliceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slices', full_name='context.SliceList.slices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3085,
-  serialized_end=3128,
-)
-
-
-_SLICEEVENT = _descriptor.Descriptor(
-  name='SliceEvent',
-  full_name='context.SliceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.SliceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.SliceEvent.slice_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3130,
-  serialized_end=3209,
-)
-
-
-_CONNECTIONID = _descriptor.Descriptor(
-  name='ConnectionId',
-  full_name='context.ConnectionId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_uuid', full_name='context.ConnectionId.connection_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3211,
-  serialized_end=3265,
-)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='context.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.Connection.connection_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Connection.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='path_hops_endpoint_ids', full_name='context.Connection.path_hops_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sub_service_ids', full_name='context.Connection.sub_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3268,
-  serialized_end=3464,
-)
-
-
-_CONNECTIONIDLIST = _descriptor.Descriptor(
-  name='ConnectionIdList',
-  full_name='context.ConnectionIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_ids', full_name='context.ConnectionIdList.connection_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3466,
-  serialized_end=3531,
-)
-
-
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='context.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connections', full_name='context.ConnectionList.connections', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3533,
-  serialized_end=3591,
-)
-
-
-_CONNECTIONEVENT = _descriptor.Descriptor(
-  name='ConnectionEvent',
-  full_name='context.ConnectionEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ConnectionEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.ConnectionEvent.connection_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3593,
-  serialized_end=3687,
-)
-
-
-_ENDPOINTID = _descriptor.Descriptor(
-  name='EndPointId',
-  full_name='context.EndPointId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.EndPointId.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.EndPointId.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_uuid', full_name='context.EndPointId.endpoint_uuid', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3690,
-  serialized_end=3820,
-)
-
-
-_ENDPOINT = _descriptor.Descriptor(
-  name='EndPoint',
-  full_name='context.EndPoint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='endpoint_id', full_name='context.EndPoint.endpoint_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_type', full_name='context.EndPoint.endpoint_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='kpi_sample_types', full_name='context.EndPoint.kpi_sample_types', index=2,
-      number=3, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3823,
-  serialized_end=3957,
-)
-
-
-_CONFIGRULE = _descriptor.Descriptor(
-  name='ConfigRule',
-  full_name='context.ConfigRule',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='context.ConfigRule.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_key', full_name='context.ConfigRule.resource_key', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_value', full_name='context.ConfigRule.resource_value', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3959,
-  serialized_end=4060,
-)
-
-
-_CONSTRAINT = _descriptor.Descriptor(
-  name='Constraint',
-  full_name='context.Constraint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='constraint_type', full_name='context.Constraint.constraint_type', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='constraint_value', full_name='context.Constraint.constraint_value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4062,
-  serialized_end=4125,
-)
-
-
-_TERAFLOWCONTROLLER = _descriptor.Descriptor(
-  name='TeraFlowController',
-  full_name='context.TeraFlowController',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TeraFlowController.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_address', full_name='context.TeraFlowController.ip_address', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port', full_name='context.TeraFlowController.port', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4127,
-  serialized_end=4221,
-)
-
-
-_AUTHENTICATIONRESULT = _descriptor.Descriptor(
-  name='AuthenticationResult',
-  full_name='context.AuthenticationResult',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.AuthenticationResult.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='authenticated', full_name='context.AuthenticationResult.authenticated', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4223,
-  serialized_end=4308,
-)
-
-_EVENT.fields_by_name['event_type'].enum_type = _EVENTTYPEENUM
-_CONTEXTID.fields_by_name['context_uuid'].message_type = _UUID
-_CONTEXT.fields_by_name['context_id'].message_type = _CONTEXTID
-_CONTEXT.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_CONTEXT.fields_by_name['service_ids'].message_type = _SERVICEID
-_CONTEXT.fields_by_name['controller'].message_type = _TERAFLOWCONTROLLER
-_CONTEXTIDLIST.fields_by_name['context_ids'].message_type = _CONTEXTID
-_CONTEXTLIST.fields_by_name['contexts'].message_type = _CONTEXT
-_CONTEXTEVENT.fields_by_name['event'].message_type = _EVENT
-_CONTEXTEVENT.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['topology_uuid'].message_type = _UUID
-_TOPOLOGY.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_TOPOLOGY.fields_by_name['device_ids'].message_type = _DEVICEID
-_TOPOLOGY.fields_by_name['link_ids'].message_type = _LINKID
-_TOPOLOGYIDLIST.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_TOPOLOGYLIST.fields_by_name['topologies'].message_type = _TOPOLOGY
-_TOPOLOGYEVENT.fields_by_name['event'].message_type = _EVENT
-_TOPOLOGYEVENT.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_DEVICEID.fields_by_name['device_uuid'].message_type = _UUID
-_DEVICE.fields_by_name['device_id'].message_type = _DEVICEID
-_DEVICE.fields_by_name['device_config'].message_type = _DEVICECONFIG
-_DEVICE.fields_by_name['device_operational_status'].enum_type = _DEVICEOPERATIONALSTATUSENUM
-_DEVICE.fields_by_name['device_drivers'].enum_type = _DEVICEDRIVERENUM
-_DEVICE.fields_by_name['device_endpoints'].message_type = _ENDPOINT
-_DEVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_DEVICEIDLIST.fields_by_name['device_ids'].message_type = _DEVICEID
-_DEVICELIST.fields_by_name['devices'].message_type = _DEVICE
-_DEVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_DEVICEEVENT.fields_by_name['device_id'].message_type = _DEVICEID
-_LINKID.fields_by_name['link_uuid'].message_type = _UUID
-_LINK.fields_by_name['link_id'].message_type = _LINKID
-_LINK.fields_by_name['link_endpoint_ids'].message_type = _ENDPOINTID
-_LINKIDLIST.fields_by_name['link_ids'].message_type = _LINKID
-_LINKLIST.fields_by_name['links'].message_type = _LINK
-_LINKEVENT.fields_by_name['event'].message_type = _EVENT
-_LINKEVENT.fields_by_name['link_id'].message_type = _LINKID
-_SERVICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SERVICEID.fields_by_name['service_uuid'].message_type = _UUID
-_SERVICE.fields_by_name['service_id'].message_type = _SERVICEID
-_SERVICE.fields_by_name['service_type'].enum_type = _SERVICETYPEENUM
-_SERVICE.fields_by_name['service_endpoint_ids'].message_type = _ENDPOINTID
-_SERVICE.fields_by_name['service_constraints'].message_type = _CONSTRAINT
-_SERVICE.fields_by_name['service_status'].message_type = _SERVICESTATUS
-_SERVICE.fields_by_name['service_config'].message_type = _SERVICECONFIG
-_SERVICESTATUS.fields_by_name['service_status'].enum_type = _SERVICESTATUSENUM
-_SERVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_SERVICEIDLIST.fields_by_name['service_ids'].message_type = _SERVICEID
-_SERVICELIST.fields_by_name['services'].message_type = _SERVICE
-_SERVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SERVICEEVENT.fields_by_name['service_id'].message_type = _SERVICEID
-_SLICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SLICEID.fields_by_name['slice_uuid'].message_type = _UUID
-_SLICE.fields_by_name['slice_id'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_endpoint_ids'].message_type = _ENDPOINTID
-_SLICE.fields_by_name['slice_constraints'].message_type = _CONSTRAINT
-_SLICE.fields_by_name['slice_service_ids'].message_type = _SERVICEID
-_SLICE.fields_by_name['slice_subslice_ids'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_status'].message_type = _SLICESTATUS
-_SLICESTATUS.fields_by_name['slice_status'].enum_type = _SLICESTATUSENUM
-_SLICEIDLIST.fields_by_name['slice_ids'].message_type = _SLICEID
-_SLICELIST.fields_by_name['slices'].message_type = _SLICE
-_SLICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SLICEEVENT.fields_by_name['slice_id'].message_type = _SLICEID
-_CONNECTIONID.fields_by_name['connection_uuid'].message_type = _UUID
-_CONNECTION.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_CONNECTION.fields_by_name['service_id'].message_type = _SERVICEID
-_CONNECTION.fields_by_name['path_hops_endpoint_ids'].message_type = _ENDPOINTID
-_CONNECTION.fields_by_name['sub_service_ids'].message_type = _SERVICEID
-_CONNECTIONIDLIST.fields_by_name['connection_ids'].message_type = _CONNECTIONID
-_CONNECTIONLIST.fields_by_name['connections'].message_type = _CONNECTION
-_CONNECTIONEVENT.fields_by_name['event'].message_type = _EVENT
-_CONNECTIONEVENT.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_ENDPOINTID.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_ENDPOINTID.fields_by_name['device_id'].message_type = _DEVICEID
-_ENDPOINTID.fields_by_name['endpoint_uuid'].message_type = _UUID
-_ENDPOINT.fields_by_name['endpoint_id'].message_type = _ENDPOINTID
-_ENDPOINT.fields_by_name['kpi_sample_types'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
-_CONFIGRULE.fields_by_name['action'].enum_type = _CONFIGACTIONENUM
-_TERAFLOWCONTROLLER.fields_by_name['context_id'].message_type = _CONTEXTID
-_AUTHENTICATIONRESULT.fields_by_name['context_id'].message_type = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['Uuid'] = _UUID
-DESCRIPTOR.message_types_by_name['Event'] = _EVENT
-DESCRIPTOR.message_types_by_name['ContextId'] = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Context'] = _CONTEXT
-DESCRIPTOR.message_types_by_name['ContextIdList'] = _CONTEXTIDLIST
-DESCRIPTOR.message_types_by_name['ContextList'] = _CONTEXTLIST
-DESCRIPTOR.message_types_by_name['ContextEvent'] = _CONTEXTEVENT
-DESCRIPTOR.message_types_by_name['TopologyId'] = _TOPOLOGYID
-DESCRIPTOR.message_types_by_name['Topology'] = _TOPOLOGY
-DESCRIPTOR.message_types_by_name['TopologyIdList'] = _TOPOLOGYIDLIST
-DESCRIPTOR.message_types_by_name['TopologyList'] = _TOPOLOGYLIST
-DESCRIPTOR.message_types_by_name['TopologyEvent'] = _TOPOLOGYEVENT
-DESCRIPTOR.message_types_by_name['DeviceId'] = _DEVICEID
-DESCRIPTOR.message_types_by_name['Device'] = _DEVICE
-DESCRIPTOR.message_types_by_name['DeviceConfig'] = _DEVICECONFIG
-DESCRIPTOR.message_types_by_name['DeviceIdList'] = _DEVICEIDLIST
-DESCRIPTOR.message_types_by_name['DeviceList'] = _DEVICELIST
-DESCRIPTOR.message_types_by_name['DeviceEvent'] = _DEVICEEVENT
-DESCRIPTOR.message_types_by_name['LinkId'] = _LINKID
-DESCRIPTOR.message_types_by_name['Link'] = _LINK
-DESCRIPTOR.message_types_by_name['LinkIdList'] = _LINKIDLIST
-DESCRIPTOR.message_types_by_name['LinkList'] = _LINKLIST
-DESCRIPTOR.message_types_by_name['LinkEvent'] = _LINKEVENT
-DESCRIPTOR.message_types_by_name['ServiceId'] = _SERVICEID
-DESCRIPTOR.message_types_by_name['Service'] = _SERVICE
-DESCRIPTOR.message_types_by_name['ServiceStatus'] = _SERVICESTATUS
-DESCRIPTOR.message_types_by_name['ServiceConfig'] = _SERVICECONFIG
-DESCRIPTOR.message_types_by_name['ServiceIdList'] = _SERVICEIDLIST
-DESCRIPTOR.message_types_by_name['ServiceList'] = _SERVICELIST
-DESCRIPTOR.message_types_by_name['ServiceEvent'] = _SERVICEEVENT
-DESCRIPTOR.message_types_by_name['SliceId'] = _SLICEID
-DESCRIPTOR.message_types_by_name['Slice'] = _SLICE
-DESCRIPTOR.message_types_by_name['SliceStatus'] = _SLICESTATUS
-DESCRIPTOR.message_types_by_name['SliceIdList'] = _SLICEIDLIST
-DESCRIPTOR.message_types_by_name['SliceList'] = _SLICELIST
-DESCRIPTOR.message_types_by_name['SliceEvent'] = _SLICEEVENT
-DESCRIPTOR.message_types_by_name['ConnectionId'] = _CONNECTIONID
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionIdList'] = _CONNECTIONIDLIST
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-DESCRIPTOR.message_types_by_name['ConnectionEvent'] = _CONNECTIONEVENT
-DESCRIPTOR.message_types_by_name['EndPointId'] = _ENDPOINTID
-DESCRIPTOR.message_types_by_name['EndPoint'] = _ENDPOINT
-DESCRIPTOR.message_types_by_name['ConfigRule'] = _CONFIGRULE
-DESCRIPTOR.message_types_by_name['Constraint'] = _CONSTRAINT
-DESCRIPTOR.message_types_by_name['TeraFlowController'] = _TERAFLOWCONTROLLER
-DESCRIPTOR.message_types_by_name['AuthenticationResult'] = _AUTHENTICATIONRESULT
-DESCRIPTOR.enum_types_by_name['EventTypeEnum'] = _EVENTTYPEENUM
-DESCRIPTOR.enum_types_by_name['DeviceDriverEnum'] = _DEVICEDRIVERENUM
-DESCRIPTOR.enum_types_by_name['DeviceOperationalStatusEnum'] = _DEVICEOPERATIONALSTATUSENUM
-DESCRIPTOR.enum_types_by_name['ServiceTypeEnum'] = _SERVICETYPEENUM
-DESCRIPTOR.enum_types_by_name['ServiceStatusEnum'] = _SERVICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['SliceStatusEnum'] = _SLICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['ConfigActionEnum'] = _CONFIGACTIONENUM
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), {
-  'DESCRIPTOR' : _UUID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Uuid)
-  })
-_sym_db.RegisterMessage(Uuid)
-
-Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), {
-  'DESCRIPTOR' : _EVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Event)
-  })
-_sym_db.RegisterMessage(Event)
-
-ContextId = _reflection.GeneratedProtocolMessageType('ContextId', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextId)
-  })
-_sym_db.RegisterMessage(ContextId)
-
-Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Context)
-  })
-_sym_db.RegisterMessage(Context)
-
-ContextIdList = _reflection.GeneratedProtocolMessageType('ContextIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextIdList)
-  })
-_sym_db.RegisterMessage(ContextIdList)
-
-ContextList = _reflection.GeneratedProtocolMessageType('ContextList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextList)
-  })
-_sym_db.RegisterMessage(ContextList)
-
-ContextEvent = _reflection.GeneratedProtocolMessageType('ContextEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextEvent)
-  })
-_sym_db.RegisterMessage(ContextEvent)
-
-TopologyId = _reflection.GeneratedProtocolMessageType('TopologyId', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyId)
-  })
-_sym_db.RegisterMessage(TopologyId)
-
-Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Topology)
-  })
-_sym_db.RegisterMessage(Topology)
-
-TopologyIdList = _reflection.GeneratedProtocolMessageType('TopologyIdList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyIdList)
-  })
-_sym_db.RegisterMessage(TopologyIdList)
-
-TopologyList = _reflection.GeneratedProtocolMessageType('TopologyList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyList)
-  })
-_sym_db.RegisterMessage(TopologyList)
-
-TopologyEvent = _reflection.GeneratedProtocolMessageType('TopologyEvent', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyEvent)
-  })
-_sym_db.RegisterMessage(TopologyEvent)
-
-DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceId)
-  })
-_sym_db.RegisterMessage(DeviceId)
-
-Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Device)
-  })
-_sym_db.RegisterMessage(Device)
-
-DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceConfig)
-  })
-_sym_db.RegisterMessage(DeviceConfig)
-
-DeviceIdList = _reflection.GeneratedProtocolMessageType('DeviceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceIdList)
-  })
-_sym_db.RegisterMessage(DeviceIdList)
-
-DeviceList = _reflection.GeneratedProtocolMessageType('DeviceList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceList)
-  })
-_sym_db.RegisterMessage(DeviceList)
-
-DeviceEvent = _reflection.GeneratedProtocolMessageType('DeviceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceEvent)
-  })
-_sym_db.RegisterMessage(DeviceEvent)
-
-LinkId = _reflection.GeneratedProtocolMessageType('LinkId', (_message.Message,), {
-  'DESCRIPTOR' : _LINKID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkId)
-  })
-_sym_db.RegisterMessage(LinkId)
-
-Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), {
-  'DESCRIPTOR' : _LINK,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Link)
-  })
-_sym_db.RegisterMessage(Link)
-
-LinkIdList = _reflection.GeneratedProtocolMessageType('LinkIdList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkIdList)
-  })
-_sym_db.RegisterMessage(LinkIdList)
-
-LinkList = _reflection.GeneratedProtocolMessageType('LinkList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkList)
-  })
-_sym_db.RegisterMessage(LinkList)
-
-LinkEvent = _reflection.GeneratedProtocolMessageType('LinkEvent', (_message.Message,), {
-  'DESCRIPTOR' : _LINKEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkEvent)
-  })
-_sym_db.RegisterMessage(LinkEvent)
-
-ServiceId = _reflection.GeneratedProtocolMessageType('ServiceId', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceId)
-  })
-_sym_db.RegisterMessage(ServiceId)
-
-Service = _reflection.GeneratedProtocolMessageType('Service', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Service)
-  })
-_sym_db.RegisterMessage(Service)
-
-ServiceStatus = _reflection.GeneratedProtocolMessageType('ServiceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceStatus)
-  })
-_sym_db.RegisterMessage(ServiceStatus)
-
-ServiceConfig = _reflection.GeneratedProtocolMessageType('ServiceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceConfig)
-  })
-_sym_db.RegisterMessage(ServiceConfig)
-
-ServiceIdList = _reflection.GeneratedProtocolMessageType('ServiceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceIdList)
-  })
-_sym_db.RegisterMessage(ServiceIdList)
-
-ServiceList = _reflection.GeneratedProtocolMessageType('ServiceList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceList)
-  })
-_sym_db.RegisterMessage(ServiceList)
-
-ServiceEvent = _reflection.GeneratedProtocolMessageType('ServiceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceEvent)
-  })
-_sym_db.RegisterMessage(ServiceEvent)
-
-SliceId = _reflection.GeneratedProtocolMessageType('SliceId', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceId)
-  })
-_sym_db.RegisterMessage(SliceId)
-
-Slice = _reflection.GeneratedProtocolMessageType('Slice', (_message.Message,), {
-  'DESCRIPTOR' : _SLICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Slice)
-  })
-_sym_db.RegisterMessage(Slice)
-
-SliceStatus = _reflection.GeneratedProtocolMessageType('SliceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SLICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceStatus)
-  })
-_sym_db.RegisterMessage(SliceStatus)
-
-SliceIdList = _reflection.GeneratedProtocolMessageType('SliceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceIdList)
-  })
-_sym_db.RegisterMessage(SliceIdList)
-
-SliceList = _reflection.GeneratedProtocolMessageType('SliceList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceList)
-  })
-_sym_db.RegisterMessage(SliceList)
-
-SliceEvent = _reflection.GeneratedProtocolMessageType('SliceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceEvent)
-  })
-_sym_db.RegisterMessage(SliceEvent)
-
-ConnectionId = _reflection.GeneratedProtocolMessageType('ConnectionId', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionId)
-  })
-_sym_db.RegisterMessage(ConnectionId)
-
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTION,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Connection)
-  })
-_sym_db.RegisterMessage(Connection)
-
-ConnectionIdList = _reflection.GeneratedProtocolMessageType('ConnectionIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-  })
-_sym_db.RegisterMessage(ConnectionIdList)
-
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionList)
-  })
-_sym_db.RegisterMessage(ConnectionList)
-
-ConnectionEvent = _reflection.GeneratedProtocolMessageType('ConnectionEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-  })
-_sym_db.RegisterMessage(ConnectionEvent)
-
-EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPointId)
-  })
-_sym_db.RegisterMessage(EndPointId)
-
-EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPoint)
-  })
-_sym_db.RegisterMessage(EndPoint)
-
-ConfigRule = _reflection.GeneratedProtocolMessageType('ConfigRule', (_message.Message,), {
-  'DESCRIPTOR' : _CONFIGRULE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConfigRule)
-  })
-_sym_db.RegisterMessage(ConfigRule)
-
-Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), {
-  'DESCRIPTOR' : _CONSTRAINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Constraint)
-  })
-_sym_db.RegisterMessage(Constraint)
-
-TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), {
-  'DESCRIPTOR' : _TERAFLOWCONTROLLER,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TeraFlowController)
-  })
-_sym_db.RegisterMessage(TeraFlowController)
-
-AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), {
-  'DESCRIPTOR' : _AUTHENTICATIONRESULT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-  })
-_sym_db.RegisterMessage(AuthenticationResult)
-
-
-
-_CONTEXTSERVICE = _descriptor.ServiceDescriptor(
-  name='ContextService',
-  full_name='context.ContextService',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=5273,
-  serialized_end=7688,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ListContextIds',
-    full_name='context.ContextService.ListContextIds',
-    index=0,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListContexts',
-    full_name='context.ContextService.ListContexts',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContext',
-    full_name='context.ContextService.GetContext',
-    index=2,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_CONTEXT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetContext',
-    full_name='context.ContextService.SetContext',
-    index=3,
-    containing_service=None,
-    input_type=_CONTEXT,
-    output_type=_CONTEXTID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveContext',
-    full_name='context.ContextService.RemoveContext',
-    index=4,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContextEvents',
-    full_name='context.ContextService.GetContextEvents',
-    index=5,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologyIds',
-    full_name='context.ContextService.ListTopologyIds',
-    index=6,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologies',
-    full_name='context.ContextService.ListTopologies',
-    index=7,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopology',
-    full_name='context.ContextService.GetTopology',
-    index=8,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_TOPOLOGY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetTopology',
-    full_name='context.ContextService.SetTopology',
-    index=9,
-    containing_service=None,
-    input_type=_TOPOLOGY,
-    output_type=_TOPOLOGYID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveTopology',
-    full_name='context.ContextService.RemoveTopology',
-    index=10,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopologyEvents',
-    full_name='context.ContextService.GetTopologyEvents',
-    index=11,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_TOPOLOGYEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDeviceIds',
-    full_name='context.ContextService.ListDeviceIds',
-    index=12,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDevices',
-    full_name='context.ContextService.ListDevices',
-    index=13,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDevice',
-    full_name='context.ContextService.GetDevice',
-    index=14,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_DEVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetDevice',
-    full_name='context.ContextService.SetDevice',
-    index=15,
-    containing_service=None,
-    input_type=_DEVICE,
-    output_type=_DEVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveDevice',
-    full_name='context.ContextService.RemoveDevice',
-    index=16,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDeviceEvents',
-    full_name='context.ContextService.GetDeviceEvents',
-    index=17,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinkIds',
-    full_name='context.ContextService.ListLinkIds',
-    index=18,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinks',
-    full_name='context.ContextService.ListLinks',
-    index=19,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLink',
-    full_name='context.ContextService.GetLink',
-    index=20,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_LINK,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetLink',
-    full_name='context.ContextService.SetLink',
-    index=21,
-    containing_service=None,
-    input_type=_LINK,
-    output_type=_LINKID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveLink',
-    full_name='context.ContextService.RemoveLink',
-    index=22,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLinkEvents',
-    full_name='context.ContextService.GetLinkEvents',
-    index=23,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServiceIds',
-    full_name='context.ContextService.ListServiceIds',
-    index=24,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServices',
-    full_name='context.ContextService.ListServices',
-    index=25,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetService',
-    full_name='context.ContextService.GetService',
-    index=26,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_SERVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetService',
-    full_name='context.ContextService.SetService',
-    index=27,
-    containing_service=None,
-    input_type=_SERVICE,
-    output_type=_SERVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveService',
-    full_name='context.ContextService.RemoveService',
-    index=28,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetServiceEvents',
-    full_name='context.ContextService.GetServiceEvents',
-    index=29,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SERVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSliceIds',
-    full_name='context.ContextService.ListSliceIds',
-    index=30,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSlices',
-    full_name='context.ContextService.ListSlices',
-    index=31,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSlice',
-    full_name='context.ContextService.GetSlice',
-    index=32,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_SLICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetSlice',
-    full_name='context.ContextService.SetSlice',
-    index=33,
-    containing_service=None,
-    input_type=_SLICE,
-    output_type=_SLICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveSlice',
-    full_name='context.ContextService.RemoveSlice',
-    index=34,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSliceEvents',
-    full_name='context.ContextService.GetSliceEvents',
-    index=35,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SLICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnectionIds',
-    full_name='context.ContextService.ListConnectionIds',
-    index=36,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnections',
-    full_name='context.ContextService.ListConnections',
-    index=37,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnection',
-    full_name='context.ContextService.GetConnection',
-    index=38,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_CONNECTION,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetConnection',
-    full_name='context.ContextService.SetConnection',
-    index=39,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=_CONNECTIONID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveConnection',
-    full_name='context.ContextService.RemoveConnection',
-    index=40,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnectionEvents',
-    full_name='context.ContextService.GetConnectionEvents',
-    index=41,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONNECTIONEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONTEXTSERVICE)
-
-DESCRIPTOR.services_by_name['ContextService'] = _CONTEXTSERVICE
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_attackmitigator/proto/kpi_sample_types_pb2.py b/src/l3_attackmitigator/proto/kpi_sample_types_pb2.py
deleted file mode 100644
index ea7fd2f82757d4c3db02d7e2c7817e2787b0b490..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/kpi_sample_types_pb2.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: kpi_sample_types.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='kpi_sample_types.proto',
-  package='kpi_sample_types',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x16kpi_sample_types.proto\x12\x10kpi_sample_types*\xbe\x01\n\rKpiSampleType\x12\x19\n\x15KPISAMPLETYPE_UNKNOWN\x10\x00\x12%\n!KPISAMPLETYPE_PACKETS_TRANSMITTED\x10\x65\x12\"\n\x1eKPISAMPLETYPE_PACKETS_RECEIVED\x10\x66\x12$\n\x1fKPISAMPLETYPE_BYTES_TRANSMITTED\x10\xc9\x01\x12!\n\x1cKPISAMPLETYPE_BYTES_RECEIVED\x10\xca\x01\x62\x06proto3'
-)
-
-_KPISAMPLETYPE = _descriptor.EnumDescriptor(
-  name='KpiSampleType',
-  full_name='kpi_sample_types.KpiSampleType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_TRANSMITTED', index=1, number=101,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_RECEIVED', index=2, number=102,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_TRANSMITTED', index=3, number=201,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_RECEIVED', index=4, number=202,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=45,
-  serialized_end=235,
-)
-_sym_db.RegisterEnumDescriptor(_KPISAMPLETYPE)
-
-KpiSampleType = enum_type_wrapper.EnumTypeWrapper(_KPISAMPLETYPE)
-KPISAMPLETYPE_UNKNOWN = 0
-KPISAMPLETYPE_PACKETS_TRANSMITTED = 101
-KPISAMPLETYPE_PACKETS_RECEIVED = 102
-KPISAMPLETYPE_BYTES_TRANSMITTED = 201
-KPISAMPLETYPE_BYTES_RECEIVED = 202
-
-
-DESCRIPTOR.enum_types_by_name['KpiSampleType'] = _KPISAMPLETYPE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2.py b/src/l3_attackmitigator/proto/l3_attackmitigator_pb2.py
deleted file mode 100644
index e148d0a2cfda7b7ea00b40218dcfe3dcb70f1f8f..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_attackmitigator.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import context_pb2 as context__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_attackmitigator.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x18l3_attackmitigator.proto\x1a\rcontext.proto\"\xd5\x01\n\x17L3AttackmitigatorOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x80\x01\n\x11L3Attackmitigator\x12\x38\n\nSendOutput\x12\x18.L3AttackmitigatorOutput\x1a\x0e.context.Empty\"\x00\x12\x31\n\rGetMitigation\x12\x0e.context.Empty\x1a\x0e.context.Empty\"\x00\x62\x06proto3'
-  ,
-  dependencies=[context__pb2.DESCRIPTOR,])
-
-
-
-
-_L3ATTACKMITIGATOROUTPUT = _descriptor.Descriptor(
-  name='L3AttackmitigatorOutput',
-  full_name='L3AttackmitigatorOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3AttackmitigatorOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3AttackmitigatorOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3AttackmitigatorOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3AttackmitigatorOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3AttackmitigatorOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3AttackmitigatorOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3AttackmitigatorOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3AttackmitigatorOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3AttackmitigatorOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3AttackmitigatorOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3AttackmitigatorOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=44,
-  serialized_end=257,
-)
-
-DESCRIPTOR.message_types_by_name['L3AttackmitigatorOutput'] = _L3ATTACKMITIGATOROUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3AttackmitigatorOutput = _reflection.GeneratedProtocolMessageType('L3AttackmitigatorOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3ATTACKMITIGATOROUTPUT,
-  '__module__' : 'l3_attackmitigator_pb2'
-  # @@protoc_insertion_point(class_scope:L3AttackmitigatorOutput)
-  })
-_sym_db.RegisterMessage(L3AttackmitigatorOutput)
-
-
-
-_L3ATTACKMITIGATOR = _descriptor.ServiceDescriptor(
-  name='L3Attackmitigator',
-  full_name='L3Attackmitigator',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=260,
-  serialized_end=388,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendOutput',
-    full_name='L3Attackmitigator.SendOutput',
-    index=0,
-    containing_service=None,
-    input_type=_L3ATTACKMITIGATOROUTPUT,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetMitigation',
-    full_name='L3Attackmitigator.GetMitigation',
-    index=1,
-    containing_service=None,
-    input_type=context__pb2._EMPTY,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3ATTACKMITIGATOR)
-
-DESCRIPTOR.services_by_name['L3Attackmitigator'] = _L3ATTACKMITIGATOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2_grpc.py b/src/l3_attackmitigator/proto/l3_attackmitigator_pb2_grpc.py
deleted file mode 100644
index 25d4afdbad81390589992b48374eb2226a31647e..0000000000000000000000000000000000000000
--- a/src/l3_attackmitigator/proto/l3_attackmitigator_pb2_grpc.py
+++ /dev/null
@@ -1,102 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from . import context_pb2 as context__pb2
-from . import l3_attackmitigator_pb2 as l3__attackmitigator__pb2
-
-
-class L3AttackmitigatorStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.SendOutput = channel.unary_unary(
-                '/L3Attackmitigator/SendOutput',
-                request_serializer=l3__attackmitigator__pb2.L3AttackmitigatorOutput.SerializeToString,
-                response_deserializer=context__pb2.Empty.FromString,
-                )
-        self.GetMitigation = channel.unary_unary(
-                '/L3Attackmitigator/GetMitigation',
-                request_serializer=context__pb2.Empty.SerializeToString,
-                response_deserializer=context__pb2.Empty.FromString,
-                )
-
-
-class L3AttackmitigatorServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def SendOutput(self, request, context):
-        """Sends a greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetMitigation(self, request, context):
-        """Sends another greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_L3AttackmitigatorServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'SendOutput': grpc.unary_unary_rpc_method_handler(
-                    servicer.SendOutput,
-                    request_deserializer=l3__attackmitigator__pb2.L3AttackmitigatorOutput.FromString,
-                    response_serializer=context__pb2.Empty.SerializeToString,
-            ),
-            'GetMitigation': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetMitigation,
-                    request_deserializer=context__pb2.Empty.FromString,
-                    response_serializer=context__pb2.Empty.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'L3Attackmitigator', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class L3Attackmitigator(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def SendOutput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Attackmitigator/SendOutput',
-            l3__attackmitigator__pb2.L3AttackmitigatorOutput.SerializeToString,
-            context__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetMitigation(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Attackmitigator/GetMitigation',
-            context__pb2.Empty.SerializeToString,
-            context__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/l3_attackmitigator/requirements.in b/src/l3_attackmitigator/requirements.in
index ede9c839d93cc377e93c525bc1e85243576faa00..772ae923931c8b09917e75a600ce2b5a0d2d4ecf 100644
--- a/src/l3_attackmitigator/requirements.in
+++ b/src/l3_attackmitigator/requirements.in
@@ -1,9 +1 @@
-grpcio-health-checking
-grpcio
-grpcio-tools
-prometheus-client
-pytest
-pytest-benchmark
-numpy
-scikit-learn
-coverage
\ No newline at end of file
+# no extra dependency
diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorService.py b/src/l3_attackmitigator/service/l3_attackmitigatorService.py
index ae52d6285c74e121f6062c42de69597d05c37b45..a359d1d9fc897ea3c01c7fa4d39e9dfbb4195306 100644
--- a/src/l3_attackmitigator/service/l3_attackmitigatorService.py
+++ b/src/l3_attackmitigator/service/l3_attackmitigatorService.py
@@ -18,10 +18,10 @@ from concurrent import futures
 from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH
 from grpc_health.v1.health_pb2 import HealthCheckResponse
 from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server
-from l3_attackmitigator.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     add_L3AttackmitigatorServicer_to_server,
 )
-from l3_attackmitigator.service.l3_attackmitigatorServiceServicerImpl import (
+from common.service.l3_attackmitigatorServiceServicerImpl import (
     l3_attackmitigatorServiceServicerImpl,
 )
 from l3_attackmitigator.Config import (
diff --git a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py
index 6e74cd455b8a166802f2a1f781451a0aa5e743ca..8664704524ecef779235af3ca3dc765af7af4898 100644
--- a/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py
+++ b/src/l3_attackmitigator/service/l3_attackmitigatorServiceServicerImpl.py
@@ -14,10 +14,10 @@
 
 from __future__ import print_function
 import logging
-from l3_attackmitigator.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     EmptyMitigator
 )
-from l3_attackmitigator.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     L3AttackmitigatorServicer,
 )
 
diff --git a/src/l3_attackmitigator/tests/test_unitary.py b/src/l3_attackmitigator/tests/test_unitary.py
index 7a33cbd8a29c8d64ca468ac366d38bdc7199aacd..14d43edaff85da0e2597c55557dde74dbaae32aa 100644
--- a/src/l3_attackmitigator/tests/test_unitary.py
+++ b/src/l3_attackmitigator/tests/test_unitary.py
@@ -17,7 +17,7 @@ import pytest
 from l3_attackmitigator.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
 from l3_attackmitigator.client.l3_attackmitigatorClient import l3_attackmitigatorClient
 from l3_attackmitigator.service.l3_attackmitigatorService import l3_attackmitigatorService
-from l3_attackmitigator.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     Output,
 )
 
diff --git a/src/l3_centralizedattackdetector/.gitlab-ci.yml b/src/l3_centralizedattackdetector/.gitlab-ci.yml
index ca95af8816ce01b433d462a5d09d8ef14776734f..073b7925c7f7c39e1a44766fc21167236875877d 100644
--- a/src/l3_centralizedattackdetector/.gitlab-ci.yml
+++ b/src/l3_centralizedattackdetector/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag, and push the Docker images to the GitLab Docker registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build l3_centralizedattackdetector:
   variables:
     IMAGE_NAME: 'l3_centralizedattackdetector' # name of the microservice
@@ -21,22 +21,24 @@ build l3_centralizedattackdetector:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
-# Pull, execute, and run unitary tests for the Docker image from the GitLab registry
+# Apply unit test to the component
 unit test l3_centralizedattackdetector:
   variables:
     IMAGE_NAME: 'l3_centralizedattackdetector' # name of the microservice
@@ -46,7 +48,7 @@ unit test l3_centralizedattackdetector:
     - build l3_centralizedattackdetector
   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 network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; 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"
@@ -62,8 +64,10 @@ unit test l3_centralizedattackdetector:
     - 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)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
diff --git a/src/l3_centralizedattackdetector/Dockerfile b/src/l3_centralizedattackdetector/Dockerfile
index 6a52cda86e9de16213bc058a0ffeeba04f85f6f9..8e8293ff254d1ead4b2b039d12263c93a50677e9 100644
--- a/src/l3_centralizedattackdetector/Dockerfile
+++ b/src/l3_centralizedattackdetector/Dockerfile
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:3-slim
+FROM python:3.9-slim
 
 # Install dependencies
 RUN apt-get --yes --quiet --quiet update && \
@@ -28,22 +28,41 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
 
-# Set working directory
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
 WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
 
-# Create module sub-folders
-RUN mkdir -p /var/teraflow/l3_centralizedattackdetector
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
 
-# Get Python packages per module
-COPY l3_centralizedattackdetector/requirements.in l3_centralizedattackdetector/requirements.in
-RUN pip-compile --output-file=l3_centralizedattackdetector/requirements.txt l3_centralizedattackdetector/requirements.in
-RUN python3 -m pip install -r l3_centralizedattackdetector/requirements.in
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/l3_centralizedattackdetector
+WORKDIR /var/teraflow/l3_centralizedattackdetector
+COPY src/l3_centralizedattackdetector/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
 
-# Add files into working directory
-COPY common/. common
+# Add component files into working directory
+WORKDIR /var/teraflow
 COPY l3_centralizedattackdetector/. l3_centralizedattackdetector
 
-# Start service service
+# Start the service
 ENTRYPOINT ["python", "-m", "l3_centralizedattackdetector.service"]
diff --git a/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py b/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py
index b5181d63e02bcb77ec92e8c53374b38cb4bc72d3..3a159503c1c2d6b7387122430f1d36b77cd3ff78 100644
--- a/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py
+++ b/src/l3_centralizedattackdetector/client/l3_centralizedattackdetectorClient.py
@@ -14,10 +14,10 @@
 
 import grpc, logging
 from common.tools.client.RetryDecorator import retry, delay_exponential
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     L3CentralizedattackdetectorStub,
 )
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     Empty,
     ModelInput,
     ModelOutput
diff --git a/src/l3_centralizedattackdetector/genproto.sh b/src/l3_centralizedattackdetector/genproto.sh
deleted file mode 100755
index 54b16a486f893938a4970c5c28f80505dec5fc40..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/genproto.sh
+++ /dev/null
@@ -1,52 +0,0 @@
-#!/bin/bash -eu
-#
-# 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.
-
-# Make folder containing the script the root folder for its execution
-cd $(dirname $0)
-
-rm -rf proto/*.py
-rm -rf proto/__pycache__
-tee proto/__init__.py << EOF > /dev/null
-# 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.
-
-EOF
-
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto context.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto kpi_sample_types.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_attackmitigator.proto
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_centralizedattackdetector.proto
-
-rm proto/context_pb2_grpc.py
-rm proto/kpi_sample_types_pb2_grpc.py
-rm proto/l3_attackmitigator_pb2_grpc.py
-
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/context_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/kpi_sample_types_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2_grpc.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_attackmitigator_pb2.py
diff --git a/src/l3_centralizedattackdetector/proto/__init__.py b/src/l3_centralizedattackdetector/proto/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# 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/l3_centralizedattackdetector/proto/context_pb2.py b/src/l3_centralizedattackdetector/proto/context_pb2.py
deleted file mode 100644
index 50d501d3ac053ad644554331af26e3c40cd426a1..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/context_pb2.py
+++ /dev/null
@@ -1,3071 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: context.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import kpi_sample_types_pb2 as kpi__sample__types__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='context.proto',
-  package='context',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\rcontext.proto\x12\x07\x63ontext\x1a\x16kpi_sample_types.proto\"\x07\n\x05\x45mpty\"\x14\n\x04Uuid\x12\x0c\n\x04uuid\x18\x01 \x01(\t\"F\n\x05\x45vent\x12\x11\n\ttimestamp\x18\x01 \x01(\x01\x12*\n\nevent_type\x18\x02 \x01(\x0e\x32\x16.context.EventTypeEnum\"0\n\tContextId\x12#\n\x0c\x63ontext_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xb6\x01\n\x07\x43ontext\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12)\n\x0ctopology_ids\x18\x02 \x03(\x0b\x32\x13.context.TopologyId\x12\'\n\x0bservice_ids\x18\x03 \x03(\x0b\x32\x12.context.ServiceId\x12/\n\ncontroller\x18\x04 \x01(\x0b\x32\x1b.context.TeraFlowController\"8\n\rContextIdList\x12\'\n\x0b\x63ontext_ids\x18\x01 \x03(\x0b\x32\x12.context.ContextId\"1\n\x0b\x43ontextList\x12\"\n\x08\x63ontexts\x18\x01 \x03(\x0b\x32\x10.context.Context\"U\n\x0c\x43ontextEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\ncontext_id\x18\x02 \x01(\x0b\x32\x12.context.ContextId\"Z\n\nTopologyId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12$\n\rtopology_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"~\n\x08Topology\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12%\n\ndevice_ids\x18\x02 \x03(\x0b\x32\x11.context.DeviceId\x12!\n\x08link_ids\x18\x03 \x03(\x0b\x32\x0f.context.LinkId\";\n\x0eTopologyIdList\x12)\n\x0ctopology_ids\x18\x01 \x03(\x0b\x32\x13.context.TopologyId\"5\n\x0cTopologyList\x12%\n\ntopologies\x18\x01 \x03(\x0b\x32\x11.context.Topology\"X\n\rTopologyEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12(\n\x0btopology_id\x18\x02 \x01(\x0b\x32\x13.context.TopologyId\".\n\x08\x44\x65viceId\x12\"\n\x0b\x64\x65vice_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\x9a\x02\n\x06\x44\x65vice\x12$\n\tdevice_id\x18\x01 \x01(\x0b\x32\x11.context.DeviceId\x12\x13\n\x0b\x64\x65vice_type\x18\x02 \x01(\t\x12,\n\rdevice_config\x18\x03 \x01(\x0b\x32\x15.context.DeviceConfig\x12G\n\x19\x64\x65vice_operational_status\x18\x04 \x01(\x0e\x32$.context.DeviceOperationalStatusEnum\x12\x31\n\x0e\x64\x65vice_drivers\x18\x05 \x03(\x0e\x32\x19.context.DeviceDriverEnum\x12+\n\x10\x64\x65vice_endpoints\x18\x06 \x03(\x0b\x32\x11.context.EndPoint\"9\n\x0c\x44\x65viceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"5\n\x0c\x44\x65viceIdList\x12%\n\ndevice_ids\x18\x01 \x03(\x0b\x32\x11.context.DeviceId\".\n\nDeviceList\x12 \n\x07\x64\x65vices\x18\x01 \x03(\x0b\x32\x0f.context.Device\"R\n\x0b\x44\x65viceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\"*\n\x06LinkId\x12 \n\tlink_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"X\n\x04Link\x12 \n\x07link_id\x18\x01 \x01(\x0b\x32\x0f.context.LinkId\x12.\n\x11link_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\"/\n\nLinkIdList\x12!\n\x08link_ids\x18\x01 \x03(\x0b\x32\x0f.context.LinkId\"(\n\x08LinkList\x12\x1c\n\x05links\x18\x01 \x03(\x0b\x32\r.context.Link\"L\n\tLinkEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12 \n\x07link_id\x18\x02 \x01(\x0b\x32\x0f.context.LinkId\"X\n\tServiceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12#\n\x0cservice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\xa6\x02\n\x07Service\x12&\n\nservice_id\x18\x01 \x01(\x0b\x32\x12.context.ServiceId\x12.\n\x0cservice_type\x18\x02 \x01(\x0e\x32\x18.context.ServiceTypeEnum\x12\x31\n\x14service_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12\x30\n\x13service_constraints\x18\x04 \x03(\x0b\x32\x13.context.Constraint\x12.\n\x0eservice_status\x18\x05 \x01(\x0b\x32\x16.context.ServiceStatus\x12.\n\x0eservice_config\x18\x06 \x01(\x0b\x32\x16.context.ServiceConfig\"C\n\rServiceStatus\x12\x32\n\x0eservice_status\x18\x01 \x01(\x0e\x32\x1a.context.ServiceStatusEnum\":\n\rServiceConfig\x12)\n\x0c\x63onfig_rules\x18\x01 \x03(\x0b\x32\x13.context.ConfigRule\"8\n\rServiceIdList\x12\'\n\x0bservice_ids\x18\x01 \x03(\x0b\x32\x12.context.ServiceId\"1\n\x0bServiceList\x12\"\n\x08services\x18\x01 \x03(\x0b\x32\x10.context.Service\"U\n\x0cServiceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\"T\n\x07SliceId\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12!\n\nslice_uuid\x18\x02 \x01(\x0b\x32\r.context.Uuid\"\x95\x02\n\x05Slice\x12\"\n\x08slice_id\x18\x01 \x01(\x0b\x32\x10.context.SliceId\x12/\n\x12slice_endpoint_ids\x18\x02 \x03(\x0b\x32\x13.context.EndPointId\x12.\n\x11slice_constraints\x18\x03 \x03(\x0b\x32\x13.context.Constraint\x12-\n\x11slice_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\x12,\n\x12slice_subslice_ids\x18\x05 \x03(\x0b\x32\x10.context.SliceId\x12*\n\x0cslice_status\x18\x06 \x01(\x0b\x32\x14.context.SliceStatus\"=\n\x0bSliceStatus\x12.\n\x0cslice_status\x18\x01 \x01(\x0e\x32\x18.context.SliceStatusEnum\"2\n\x0bSliceIdList\x12#\n\tslice_ids\x18\x01 \x03(\x0b\x32\x10.context.SliceId\"+\n\tSliceList\x12\x1e\n\x06slices\x18\x01 \x03(\x0b\x32\x0e.context.Slice\"O\n\nSliceEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12\"\n\x08slice_id\x18\x02 \x01(\x0b\x32\x10.context.SliceId\"6\n\x0c\x43onnectionId\x12&\n\x0f\x63onnection_uuid\x18\x01 \x01(\x0b\x32\r.context.Uuid\"\xc4\x01\n\nConnection\x12,\n\rconnection_id\x18\x01 \x01(\x0b\x32\x15.context.ConnectionId\x12&\n\nservice_id\x18\x02 \x01(\x0b\x32\x12.context.ServiceId\x12\x33\n\x16path_hops_endpoint_ids\x18\x03 \x03(\x0b\x32\x13.context.EndPointId\x12+\n\x0fsub_service_ids\x18\x04 \x03(\x0b\x32\x12.context.ServiceId\"A\n\x10\x43onnectionIdList\x12-\n\x0e\x63onnection_ids\x18\x01 \x03(\x0b\x32\x15.context.ConnectionId\":\n\x0e\x43onnectionList\x12(\n\x0b\x63onnections\x18\x01 \x03(\x0b\x32\x13.context.Connection\"^\n\x0f\x43onnectionEvent\x12\x1d\n\x05\x65vent\x18\x01 \x01(\x0b\x32\x0e.context.Event\x12,\n\rconnection_id\x18\x02 \x01(\x0b\x32\x15.context.ConnectionId\"\x82\x01\n\nEndPointId\x12(\n\x0btopology_id\x18\x01 \x01(\x0b\x32\x13.context.TopologyId\x12$\n\tdevice_id\x18\x02 \x01(\x0b\x32\x11.context.DeviceId\x12$\n\rendpoint_uuid\x18\x03 \x01(\x0b\x32\r.context.Uuid\"\x86\x01\n\x08\x45ndPoint\x12(\n\x0b\x65ndpoint_id\x18\x01 \x01(\x0b\x32\x13.context.EndPointId\x12\x15\n\rendpoint_type\x18\x02 \x01(\t\x12\x39\n\x10kpi_sample_types\x18\x03 \x03(\x0e\x32\x1f.kpi_sample_types.KpiSampleType\"e\n\nConfigRule\x12)\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\x19.context.ConfigActionEnum\x12\x14\n\x0cresource_key\x18\x02 \x01(\t\x12\x16\n\x0eresource_value\x18\x03 \x01(\t\"?\n\nConstraint\x12\x17\n\x0f\x63onstraint_type\x18\x01 \x01(\t\x12\x18\n\x10\x63onstraint_value\x18\x02 \x01(\t\"^\n\x12TeraFlowController\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x12\n\nip_address\x18\x02 \x01(\t\x12\x0c\n\x04port\x18\x03 \x01(\r\"U\n\x14\x41uthenticationResult\x12&\n\ncontext_id\x18\x01 \x01(\x0b\x32\x12.context.ContextId\x12\x15\n\rauthenticated\x18\x02 \x01(\x08*j\n\rEventTypeEnum\x12\x17\n\x13\x45VENTTYPE_UNDEFINED\x10\x00\x12\x14\n\x10\x45VENTTYPE_CREATE\x10\x01\x12\x14\n\x10\x45VENTTYPE_UPDATE\x10\x02\x12\x14\n\x10\x45VENTTYPE_REMOVE\x10\x03*\xc5\x01\n\x10\x44\x65viceDriverEnum\x12\x1a\n\x16\x44\x45VICEDRIVER_UNDEFINED\x10\x00\x12\x1b\n\x17\x44\x45VICEDRIVER_OPENCONFIG\x10\x01\x12\x1e\n\x1a\x44\x45VICEDRIVER_TRANSPORT_API\x10\x02\x12\x13\n\x0f\x44\x45VICEDRIVER_P4\x10\x03\x12&\n\"DEVICEDRIVER_IETF_NETWORK_TOPOLOGY\x10\x04\x12\x1b\n\x17\x44\x45VICEDRIVER_ONF_TR_352\x10\x05*\x8f\x01\n\x1b\x44\x65viceOperationalStatusEnum\x12%\n!DEVICEOPERATIONALSTATUS_UNDEFINED\x10\x00\x12$\n DEVICEOPERATIONALSTATUS_DISABLED\x10\x01\x12#\n\x1f\x44\x45VICEOPERATIONALSTATUS_ENABLED\x10\x02*\x81\x01\n\x0fServiceTypeEnum\x12\x17\n\x13SERVICETYPE_UNKNOWN\x10\x00\x12\x14\n\x10SERVICETYPE_L3NM\x10\x01\x12\x14\n\x10SERVICETYPE_L2NM\x10\x02\x12)\n%SERVICETYPE_TAPI_CONNECTIVITY_SERVICE\x10\x03*\x88\x01\n\x11ServiceStatusEnum\x12\x1b\n\x17SERVICESTATUS_UNDEFINED\x10\x00\x12\x19\n\x15SERVICESTATUS_PLANNED\x10\x01\x12\x18\n\x14SERVICESTATUS_ACTIVE\x10\x02\x12!\n\x1dSERVICESTATUS_PENDING_REMOVAL\x10\x03*\x8b\x01\n\x0fSliceStatusEnum\x12\x19\n\x15SLICESTATUS_UNDEFINED\x10\x00\x12\x17\n\x13SLICESTATUS_PLANNED\x10\x01\x12\x14\n\x10SLICESTATUS_INIT\x10\x02\x12\x16\n\x12SLICESTATUS_ACTIVE\x10\x03\x12\x16\n\x12SLICESTATUS_DEINIT\x10\x04*]\n\x10\x43onfigActionEnum\x12\x1a\n\x16\x43ONFIGACTION_UNDEFINED\x10\x00\x12\x14\n\x10\x43ONFIGACTION_SET\x10\x01\x12\x17\n\x13\x43ONFIGACTION_DELETE\x10\x02\x32\xef\x12\n\x0e\x43ontextService\x12:\n\x0eListContextIds\x12\x0e.context.Empty\x1a\x16.context.ContextIdList\"\x00\x12\x36\n\x0cListContexts\x12\x0e.context.Empty\x1a\x14.context.ContextList\"\x00\x12\x34\n\nGetContext\x12\x12.context.ContextId\x1a\x10.context.Context\"\x00\x12\x34\n\nSetContext\x12\x10.context.Context\x1a\x12.context.ContextId\"\x00\x12\x35\n\rRemoveContext\x12\x12.context.ContextId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetContextEvents\x12\x0e.context.Empty\x1a\x15.context.ContextEvent\"\x00\x30\x01\x12@\n\x0fListTopologyIds\x12\x12.context.ContextId\x1a\x17.context.TopologyIdList\"\x00\x12=\n\x0eListTopologies\x12\x12.context.ContextId\x1a\x15.context.TopologyList\"\x00\x12\x37\n\x0bGetTopology\x12\x13.context.TopologyId\x1a\x11.context.Topology\"\x00\x12\x37\n\x0bSetTopology\x12\x11.context.Topology\x1a\x13.context.TopologyId\"\x00\x12\x37\n\x0eRemoveTopology\x12\x13.context.TopologyId\x1a\x0e.context.Empty\"\x00\x12?\n\x11GetTopologyEvents\x12\x0e.context.Empty\x1a\x16.context.TopologyEvent\"\x00\x30\x01\x12\x38\n\rListDeviceIds\x12\x0e.context.Empty\x1a\x15.context.DeviceIdList\"\x00\x12\x34\n\x0bListDevices\x12\x0e.context.Empty\x1a\x13.context.DeviceList\"\x00\x12\x31\n\tGetDevice\x12\x11.context.DeviceId\x1a\x0f.context.Device\"\x00\x12\x31\n\tSetDevice\x12\x0f.context.Device\x1a\x11.context.DeviceId\"\x00\x12\x33\n\x0cRemoveDevice\x12\x11.context.DeviceId\x1a\x0e.context.Empty\"\x00\x12;\n\x0fGetDeviceEvents\x12\x0e.context.Empty\x1a\x14.context.DeviceEvent\"\x00\x30\x01\x12\x34\n\x0bListLinkIds\x12\x0e.context.Empty\x1a\x13.context.LinkIdList\"\x00\x12\x30\n\tListLinks\x12\x0e.context.Empty\x1a\x11.context.LinkList\"\x00\x12+\n\x07GetLink\x12\x0f.context.LinkId\x1a\r.context.Link\"\x00\x12+\n\x07SetLink\x12\r.context.Link\x1a\x0f.context.LinkId\"\x00\x12/\n\nRemoveLink\x12\x0f.context.LinkId\x1a\x0e.context.Empty\"\x00\x12\x37\n\rGetLinkEvents\x12\x0e.context.Empty\x1a\x12.context.LinkEvent\"\x00\x30\x01\x12>\n\x0eListServiceIds\x12\x12.context.ContextId\x1a\x16.context.ServiceIdList\"\x00\x12:\n\x0cListServices\x12\x12.context.ContextId\x1a\x14.context.ServiceList\"\x00\x12\x34\n\nGetService\x12\x12.context.ServiceId\x1a\x10.context.Service\"\x00\x12\x34\n\nSetService\x12\x10.context.Service\x1a\x12.context.ServiceId\"\x00\x12\x35\n\rRemoveService\x12\x12.context.ServiceId\x1a\x0e.context.Empty\"\x00\x12=\n\x10GetServiceEvents\x12\x0e.context.Empty\x1a\x15.context.ServiceEvent\"\x00\x30\x01\x12:\n\x0cListSliceIds\x12\x12.context.ContextId\x1a\x14.context.SliceIdList\"\x00\x12\x36\n\nListSlices\x12\x12.context.ContextId\x1a\x12.context.SliceList\"\x00\x12.\n\x08GetSlice\x12\x10.context.SliceId\x1a\x0e.context.Slice\"\x00\x12.\n\x08SetSlice\x12\x0e.context.Slice\x1a\x10.context.SliceId\"\x00\x12\x31\n\x0bRemoveSlice\x12\x10.context.SliceId\x1a\x0e.context.Empty\"\x00\x12\x39\n\x0eGetSliceEvents\x12\x0e.context.Empty\x1a\x13.context.SliceEvent\"\x00\x30\x01\x12\x44\n\x11ListConnectionIds\x12\x12.context.ServiceId\x1a\x19.context.ConnectionIdList\"\x00\x12@\n\x0fListConnections\x12\x12.context.ServiceId\x1a\x17.context.ConnectionList\"\x00\x12=\n\rGetConnection\x12\x15.context.ConnectionId\x1a\x13.context.Connection\"\x00\x12=\n\rSetConnection\x12\x13.context.Connection\x1a\x15.context.ConnectionId\"\x00\x12;\n\x10RemoveConnection\x12\x15.context.ConnectionId\x1a\x0e.context.Empty\"\x00\x12\x43\n\x13GetConnectionEvents\x12\x0e.context.Empty\x1a\x18.context.ConnectionEvent\"\x00\x30\x01\x62\x06proto3'
-  ,
-  dependencies=[kpi__sample__types__pb2.DESCRIPTOR,])
-
-_EVENTTYPEENUM = _descriptor.EnumDescriptor(
-  name='EventTypeEnum',
-  full_name='context.EventTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_CREATE', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_UPDATE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='EVENTTYPE_REMOVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4310,
-  serialized_end=4416,
-)
-_sym_db.RegisterEnumDescriptor(_EVENTTYPEENUM)
-
-EventTypeEnum = enum_type_wrapper.EnumTypeWrapper(_EVENTTYPEENUM)
-_DEVICEDRIVERENUM = _descriptor.EnumDescriptor(
-  name='DeviceDriverEnum',
-  full_name='context.DeviceDriverEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_OPENCONFIG', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_TRANSPORT_API', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_P4', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_IETF_NETWORK_TOPOLOGY', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEDRIVER_ONF_TR_352', index=5, number=5,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4419,
-  serialized_end=4616,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEDRIVERENUM)
-
-DeviceDriverEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEDRIVERENUM)
-_DEVICEOPERATIONALSTATUSENUM = _descriptor.EnumDescriptor(
-  name='DeviceOperationalStatusEnum',
-  full_name='context.DeviceOperationalStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_DISABLED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='DEVICEOPERATIONALSTATUS_ENABLED', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4619,
-  serialized_end=4762,
-)
-_sym_db.RegisterEnumDescriptor(_DEVICEOPERATIONALSTATUSENUM)
-
-DeviceOperationalStatusEnum = enum_type_wrapper.EnumTypeWrapper(_DEVICEOPERATIONALSTATUSENUM)
-_SERVICETYPEENUM = _descriptor.EnumDescriptor(
-  name='ServiceTypeEnum',
-  full_name='context.ServiceTypeEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L3NM', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_L2NM', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICETYPE_TAPI_CONNECTIVITY_SERVICE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4765,
-  serialized_end=4894,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICETYPEENUM)
-
-ServiceTypeEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICETYPEENUM)
-_SERVICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='ServiceStatusEnum',
-  full_name='context.ServiceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_ACTIVE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SERVICESTATUS_PENDING_REMOVAL', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=4897,
-  serialized_end=5033,
-)
-_sym_db.RegisterEnumDescriptor(_SERVICESTATUSENUM)
-
-ServiceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SERVICESTATUSENUM)
-_SLICESTATUSENUM = _descriptor.EnumDescriptor(
-  name='SliceStatusEnum',
-  full_name='context.SliceStatusEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_PLANNED', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_INIT', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_ACTIVE', index=3, number=3,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='SLICESTATUS_DEINIT', index=4, number=4,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5036,
-  serialized_end=5175,
-)
-_sym_db.RegisterEnumDescriptor(_SLICESTATUSENUM)
-
-SliceStatusEnum = enum_type_wrapper.EnumTypeWrapper(_SLICESTATUSENUM)
-_CONFIGACTIONENUM = _descriptor.EnumDescriptor(
-  name='ConfigActionEnum',
-  full_name='context.ConfigActionEnum',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_UNDEFINED', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_SET', index=1, number=1,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='CONFIGACTION_DELETE', index=2, number=2,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5177,
-  serialized_end=5270,
-)
-_sym_db.RegisterEnumDescriptor(_CONFIGACTIONENUM)
-
-ConfigActionEnum = enum_type_wrapper.EnumTypeWrapper(_CONFIGACTIONENUM)
-EVENTTYPE_UNDEFINED = 0
-EVENTTYPE_CREATE = 1
-EVENTTYPE_UPDATE = 2
-EVENTTYPE_REMOVE = 3
-DEVICEDRIVER_UNDEFINED = 0
-DEVICEDRIVER_OPENCONFIG = 1
-DEVICEDRIVER_TRANSPORT_API = 2
-DEVICEDRIVER_P4 = 3
-DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4
-DEVICEDRIVER_ONF_TR_352 = 5
-DEVICEOPERATIONALSTATUS_UNDEFINED = 0
-DEVICEOPERATIONALSTATUS_DISABLED = 1
-DEVICEOPERATIONALSTATUS_ENABLED = 2
-SERVICETYPE_UNKNOWN = 0
-SERVICETYPE_L3NM = 1
-SERVICETYPE_L2NM = 2
-SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3
-SERVICESTATUS_UNDEFINED = 0
-SERVICESTATUS_PLANNED = 1
-SERVICESTATUS_ACTIVE = 2
-SERVICESTATUS_PENDING_REMOVAL = 3
-SLICESTATUS_UNDEFINED = 0
-SLICESTATUS_PLANNED = 1
-SLICESTATUS_INIT = 2
-SLICESTATUS_ACTIVE = 3
-SLICESTATUS_DEINIT = 4
-CONFIGACTION_UNDEFINED = 0
-CONFIGACTION_SET = 1
-CONFIGACTION_DELETE = 2
-
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='context.Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=50,
-  serialized_end=57,
-)
-
-
-_UUID = _descriptor.Descriptor(
-  name='Uuid',
-  full_name='context.Uuid',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='uuid', full_name='context.Uuid.uuid', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=59,
-  serialized_end=79,
-)
-
-
-_EVENT = _descriptor.Descriptor(
-  name='Event',
-  full_name='context.Event',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='context.Event.timestamp', index=0,
-      number=1, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='event_type', full_name='context.Event.event_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=81,
-  serialized_end=151,
-)
-
-
-_CONTEXTID = _descriptor.Descriptor(
-  name='ContextId',
-  full_name='context.ContextId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_uuid', full_name='context.ContextId.context_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=153,
-  serialized_end=201,
-)
-
-
-_CONTEXT = _descriptor.Descriptor(
-  name='Context',
-  full_name='context.Context',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.Context.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.Context.topology_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.Context.service_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='controller', full_name='context.Context.controller', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=204,
-  serialized_end=386,
-)
-
-
-_CONTEXTIDLIST = _descriptor.Descriptor(
-  name='ContextIdList',
-  full_name='context.ContextIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_ids', full_name='context.ContextIdList.context_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=388,
-  serialized_end=444,
-)
-
-
-_CONTEXTLIST = _descriptor.Descriptor(
-  name='ContextList',
-  full_name='context.ContextList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='contexts', full_name='context.ContextList.contexts', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=446,
-  serialized_end=495,
-)
-
-
-_CONTEXTEVENT = _descriptor.Descriptor(
-  name='ContextEvent',
-  full_name='context.ContextEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ContextEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ContextEvent.context_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=497,
-  serialized_end=582,
-)
-
-
-_TOPOLOGYID = _descriptor.Descriptor(
-  name='TopologyId',
-  full_name='context.TopologyId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TopologyId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_uuid', full_name='context.TopologyId.topology_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=584,
-  serialized_end=674,
-)
-
-
-_TOPOLOGY = _descriptor.Descriptor(
-  name='Topology',
-  full_name='context.Topology',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.Topology.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.Topology.device_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.Topology.link_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=676,
-  serialized_end=802,
-)
-
-
-_TOPOLOGYIDLIST = _descriptor.Descriptor(
-  name='TopologyIdList',
-  full_name='context.TopologyIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_ids', full_name='context.TopologyIdList.topology_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=804,
-  serialized_end=863,
-)
-
-
-_TOPOLOGYLIST = _descriptor.Descriptor(
-  name='TopologyList',
-  full_name='context.TopologyList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topologies', full_name='context.TopologyList.topologies', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=865,
-  serialized_end=918,
-)
-
-
-_TOPOLOGYEVENT = _descriptor.Descriptor(
-  name='TopologyEvent',
-  full_name='context.TopologyEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.TopologyEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.TopologyEvent.topology_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=920,
-  serialized_end=1008,
-)
-
-
-_DEVICEID = _descriptor.Descriptor(
-  name='DeviceId',
-  full_name='context.DeviceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_uuid', full_name='context.DeviceId.device_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1010,
-  serialized_end=1056,
-)
-
-
-_DEVICE = _descriptor.Descriptor(
-  name='Device',
-  full_name='context.Device',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.Device.device_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_type', full_name='context.Device.device_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_config', full_name='context.Device.device_config', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_operational_status', full_name='context.Device.device_operational_status', index=3,
-      number=4, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_drivers', full_name='context.Device.device_drivers', index=4,
-      number=5, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_endpoints', full_name='context.Device.device_endpoints', index=5,
-      number=6, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1059,
-  serialized_end=1341,
-)
-
-
-_DEVICECONFIG = _descriptor.Descriptor(
-  name='DeviceConfig',
-  full_name='context.DeviceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.DeviceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1343,
-  serialized_end=1400,
-)
-
-
-_DEVICEIDLIST = _descriptor.Descriptor(
-  name='DeviceIdList',
-  full_name='context.DeviceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='device_ids', full_name='context.DeviceIdList.device_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1402,
-  serialized_end=1455,
-)
-
-
-_DEVICELIST = _descriptor.Descriptor(
-  name='DeviceList',
-  full_name='context.DeviceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='devices', full_name='context.DeviceList.devices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1457,
-  serialized_end=1503,
-)
-
-
-_DEVICEEVENT = _descriptor.Descriptor(
-  name='DeviceEvent',
-  full_name='context.DeviceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.DeviceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.DeviceEvent.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1505,
-  serialized_end=1587,
-)
-
-
-_LINKID = _descriptor.Descriptor(
-  name='LinkId',
-  full_name='context.LinkId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_uuid', full_name='context.LinkId.link_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1589,
-  serialized_end=1631,
-)
-
-
-_LINK = _descriptor.Descriptor(
-  name='Link',
-  full_name='context.Link',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.Link.link_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_endpoint_ids', full_name='context.Link.link_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1633,
-  serialized_end=1721,
-)
-
-
-_LINKIDLIST = _descriptor.Descriptor(
-  name='LinkIdList',
-  full_name='context.LinkIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='link_ids', full_name='context.LinkIdList.link_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1723,
-  serialized_end=1770,
-)
-
-
-_LINKLIST = _descriptor.Descriptor(
-  name='LinkList',
-  full_name='context.LinkList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='links', full_name='context.LinkList.links', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1772,
-  serialized_end=1812,
-)
-
-
-_LINKEVENT = _descriptor.Descriptor(
-  name='LinkEvent',
-  full_name='context.LinkEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.LinkEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='link_id', full_name='context.LinkEvent.link_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1814,
-  serialized_end=1890,
-)
-
-
-_SERVICEID = _descriptor.Descriptor(
-  name='ServiceId',
-  full_name='context.ServiceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.ServiceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_uuid', full_name='context.ServiceId.service_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1892,
-  serialized_end=1980,
-)
-
-
-_SERVICE = _descriptor.Descriptor(
-  name='Service',
-  full_name='context.Service',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Service.service_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_type', full_name='context.Service.service_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_endpoint_ids', full_name='context.Service.service_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_constraints', full_name='context.Service.service_constraints', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.Service.service_status', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_config', full_name='context.Service.service_config', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1983,
-  serialized_end=2277,
-)
-
-
-_SERVICESTATUS = _descriptor.Descriptor(
-  name='ServiceStatus',
-  full_name='context.ServiceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_status', full_name='context.ServiceStatus.service_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2279,
-  serialized_end=2346,
-)
-
-
-_SERVICECONFIG = _descriptor.Descriptor(
-  name='ServiceConfig',
-  full_name='context.ServiceConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='config_rules', full_name='context.ServiceConfig.config_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2348,
-  serialized_end=2406,
-)
-
-
-_SERVICEIDLIST = _descriptor.Descriptor(
-  name='ServiceIdList',
-  full_name='context.ServiceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service_ids', full_name='context.ServiceIdList.service_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2408,
-  serialized_end=2464,
-)
-
-
-_SERVICELIST = _descriptor.Descriptor(
-  name='ServiceList',
-  full_name='context.ServiceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='services', full_name='context.ServiceList.services', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2466,
-  serialized_end=2515,
-)
-
-
-_SERVICEEVENT = _descriptor.Descriptor(
-  name='ServiceEvent',
-  full_name='context.ServiceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ServiceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.ServiceEvent.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2517,
-  serialized_end=2602,
-)
-
-
-_SLICEID = _descriptor.Descriptor(
-  name='SliceId',
-  full_name='context.SliceId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.SliceId.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_uuid', full_name='context.SliceId.slice_uuid', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2604,
-  serialized_end=2688,
-)
-
-
-_SLICE = _descriptor.Descriptor(
-  name='Slice',
-  full_name='context.Slice',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.Slice.slice_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_endpoint_ids', full_name='context.Slice.slice_endpoint_ids', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_constraints', full_name='context.Slice.slice_constraints', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_service_ids', full_name='context.Slice.slice_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_subslice_ids', full_name='context.Slice.slice_subslice_ids', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.Slice.slice_status', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2691,
-  serialized_end=2968,
-)
-
-
-_SLICESTATUS = _descriptor.Descriptor(
-  name='SliceStatus',
-  full_name='context.SliceStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_status', full_name='context.SliceStatus.slice_status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2970,
-  serialized_end=3031,
-)
-
-
-_SLICEIDLIST = _descriptor.Descriptor(
-  name='SliceIdList',
-  full_name='context.SliceIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slice_ids', full_name='context.SliceIdList.slice_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3033,
-  serialized_end=3083,
-)
-
-
-_SLICELIST = _descriptor.Descriptor(
-  name='SliceList',
-  full_name='context.SliceList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='slices', full_name='context.SliceList.slices', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3085,
-  serialized_end=3128,
-)
-
-
-_SLICEEVENT = _descriptor.Descriptor(
-  name='SliceEvent',
-  full_name='context.SliceEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.SliceEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='slice_id', full_name='context.SliceEvent.slice_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3130,
-  serialized_end=3209,
-)
-
-
-_CONNECTIONID = _descriptor.Descriptor(
-  name='ConnectionId',
-  full_name='context.ConnectionId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_uuid', full_name='context.ConnectionId.connection_uuid', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3211,
-  serialized_end=3265,
-)
-
-
-_CONNECTION = _descriptor.Descriptor(
-  name='Connection',
-  full_name='context.Connection',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.Connection.connection_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='service_id', full_name='context.Connection.service_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='path_hops_endpoint_ids', full_name='context.Connection.path_hops_endpoint_ids', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='sub_service_ids', full_name='context.Connection.sub_service_ids', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3268,
-  serialized_end=3464,
-)
-
-
-_CONNECTIONIDLIST = _descriptor.Descriptor(
-  name='ConnectionIdList',
-  full_name='context.ConnectionIdList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connection_ids', full_name='context.ConnectionIdList.connection_ids', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3466,
-  serialized_end=3531,
-)
-
-
-_CONNECTIONLIST = _descriptor.Descriptor(
-  name='ConnectionList',
-  full_name='context.ConnectionList',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='connections', full_name='context.ConnectionList.connections', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3533,
-  serialized_end=3591,
-)
-
-
-_CONNECTIONEVENT = _descriptor.Descriptor(
-  name='ConnectionEvent',
-  full_name='context.ConnectionEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='event', full_name='context.ConnectionEvent.event', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='connection_id', full_name='context.ConnectionEvent.connection_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3593,
-  serialized_end=3687,
-)
-
-
-_ENDPOINTID = _descriptor.Descriptor(
-  name='EndPointId',
-  full_name='context.EndPointId',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topology_id', full_name='context.EndPointId.topology_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='context.EndPointId.device_id', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_uuid', full_name='context.EndPointId.endpoint_uuid', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3690,
-  serialized_end=3820,
-)
-
-
-_ENDPOINT = _descriptor.Descriptor(
-  name='EndPoint',
-  full_name='context.EndPoint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='endpoint_id', full_name='context.EndPoint.endpoint_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='endpoint_type', full_name='context.EndPoint.endpoint_type', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='kpi_sample_types', full_name='context.EndPoint.kpi_sample_types', index=2,
-      number=3, type=14, cpp_type=8, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3823,
-  serialized_end=3957,
-)
-
-
-_CONFIGRULE = _descriptor.Descriptor(
-  name='ConfigRule',
-  full_name='context.ConfigRule',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='context.ConfigRule.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_key', full_name='context.ConfigRule.resource_key', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='resource_value', full_name='context.ConfigRule.resource_value', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3959,
-  serialized_end=4060,
-)
-
-
-_CONSTRAINT = _descriptor.Descriptor(
-  name='Constraint',
-  full_name='context.Constraint',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='constraint_type', full_name='context.Constraint.constraint_type', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='constraint_value', full_name='context.Constraint.constraint_value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4062,
-  serialized_end=4125,
-)
-
-
-_TERAFLOWCONTROLLER = _descriptor.Descriptor(
-  name='TeraFlowController',
-  full_name='context.TeraFlowController',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.TeraFlowController.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_address', full_name='context.TeraFlowController.ip_address', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port', full_name='context.TeraFlowController.port', index=2,
-      number=3, type=13, cpp_type=3, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4127,
-  serialized_end=4221,
-)
-
-
-_AUTHENTICATIONRESULT = _descriptor.Descriptor(
-  name='AuthenticationResult',
-  full_name='context.AuthenticationResult',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='context_id', full_name='context.AuthenticationResult.context_id', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='authenticated', full_name='context.AuthenticationResult.authenticated', index=1,
-      number=2, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4223,
-  serialized_end=4308,
-)
-
-_EVENT.fields_by_name['event_type'].enum_type = _EVENTTYPEENUM
-_CONTEXTID.fields_by_name['context_uuid'].message_type = _UUID
-_CONTEXT.fields_by_name['context_id'].message_type = _CONTEXTID
-_CONTEXT.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_CONTEXT.fields_by_name['service_ids'].message_type = _SERVICEID
-_CONTEXT.fields_by_name['controller'].message_type = _TERAFLOWCONTROLLER
-_CONTEXTIDLIST.fields_by_name['context_ids'].message_type = _CONTEXTID
-_CONTEXTLIST.fields_by_name['contexts'].message_type = _CONTEXT
-_CONTEXTEVENT.fields_by_name['event'].message_type = _EVENT
-_CONTEXTEVENT.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['context_id'].message_type = _CONTEXTID
-_TOPOLOGYID.fields_by_name['topology_uuid'].message_type = _UUID
-_TOPOLOGY.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_TOPOLOGY.fields_by_name['device_ids'].message_type = _DEVICEID
-_TOPOLOGY.fields_by_name['link_ids'].message_type = _LINKID
-_TOPOLOGYIDLIST.fields_by_name['topology_ids'].message_type = _TOPOLOGYID
-_TOPOLOGYLIST.fields_by_name['topologies'].message_type = _TOPOLOGY
-_TOPOLOGYEVENT.fields_by_name['event'].message_type = _EVENT
-_TOPOLOGYEVENT.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_DEVICEID.fields_by_name['device_uuid'].message_type = _UUID
-_DEVICE.fields_by_name['device_id'].message_type = _DEVICEID
-_DEVICE.fields_by_name['device_config'].message_type = _DEVICECONFIG
-_DEVICE.fields_by_name['device_operational_status'].enum_type = _DEVICEOPERATIONALSTATUSENUM
-_DEVICE.fields_by_name['device_drivers'].enum_type = _DEVICEDRIVERENUM
-_DEVICE.fields_by_name['device_endpoints'].message_type = _ENDPOINT
-_DEVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_DEVICEIDLIST.fields_by_name['device_ids'].message_type = _DEVICEID
-_DEVICELIST.fields_by_name['devices'].message_type = _DEVICE
-_DEVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_DEVICEEVENT.fields_by_name['device_id'].message_type = _DEVICEID
-_LINKID.fields_by_name['link_uuid'].message_type = _UUID
-_LINK.fields_by_name['link_id'].message_type = _LINKID
-_LINK.fields_by_name['link_endpoint_ids'].message_type = _ENDPOINTID
-_LINKIDLIST.fields_by_name['link_ids'].message_type = _LINKID
-_LINKLIST.fields_by_name['links'].message_type = _LINK
-_LINKEVENT.fields_by_name['event'].message_type = _EVENT
-_LINKEVENT.fields_by_name['link_id'].message_type = _LINKID
-_SERVICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SERVICEID.fields_by_name['service_uuid'].message_type = _UUID
-_SERVICE.fields_by_name['service_id'].message_type = _SERVICEID
-_SERVICE.fields_by_name['service_type'].enum_type = _SERVICETYPEENUM
-_SERVICE.fields_by_name['service_endpoint_ids'].message_type = _ENDPOINTID
-_SERVICE.fields_by_name['service_constraints'].message_type = _CONSTRAINT
-_SERVICE.fields_by_name['service_status'].message_type = _SERVICESTATUS
-_SERVICE.fields_by_name['service_config'].message_type = _SERVICECONFIG
-_SERVICESTATUS.fields_by_name['service_status'].enum_type = _SERVICESTATUSENUM
-_SERVICECONFIG.fields_by_name['config_rules'].message_type = _CONFIGRULE
-_SERVICEIDLIST.fields_by_name['service_ids'].message_type = _SERVICEID
-_SERVICELIST.fields_by_name['services'].message_type = _SERVICE
-_SERVICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SERVICEEVENT.fields_by_name['service_id'].message_type = _SERVICEID
-_SLICEID.fields_by_name['context_id'].message_type = _CONTEXTID
-_SLICEID.fields_by_name['slice_uuid'].message_type = _UUID
-_SLICE.fields_by_name['slice_id'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_endpoint_ids'].message_type = _ENDPOINTID
-_SLICE.fields_by_name['slice_constraints'].message_type = _CONSTRAINT
-_SLICE.fields_by_name['slice_service_ids'].message_type = _SERVICEID
-_SLICE.fields_by_name['slice_subslice_ids'].message_type = _SLICEID
-_SLICE.fields_by_name['slice_status'].message_type = _SLICESTATUS
-_SLICESTATUS.fields_by_name['slice_status'].enum_type = _SLICESTATUSENUM
-_SLICEIDLIST.fields_by_name['slice_ids'].message_type = _SLICEID
-_SLICELIST.fields_by_name['slices'].message_type = _SLICE
-_SLICEEVENT.fields_by_name['event'].message_type = _EVENT
-_SLICEEVENT.fields_by_name['slice_id'].message_type = _SLICEID
-_CONNECTIONID.fields_by_name['connection_uuid'].message_type = _UUID
-_CONNECTION.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_CONNECTION.fields_by_name['service_id'].message_type = _SERVICEID
-_CONNECTION.fields_by_name['path_hops_endpoint_ids'].message_type = _ENDPOINTID
-_CONNECTION.fields_by_name['sub_service_ids'].message_type = _SERVICEID
-_CONNECTIONIDLIST.fields_by_name['connection_ids'].message_type = _CONNECTIONID
-_CONNECTIONLIST.fields_by_name['connections'].message_type = _CONNECTION
-_CONNECTIONEVENT.fields_by_name['event'].message_type = _EVENT
-_CONNECTIONEVENT.fields_by_name['connection_id'].message_type = _CONNECTIONID
-_ENDPOINTID.fields_by_name['topology_id'].message_type = _TOPOLOGYID
-_ENDPOINTID.fields_by_name['device_id'].message_type = _DEVICEID
-_ENDPOINTID.fields_by_name['endpoint_uuid'].message_type = _UUID
-_ENDPOINT.fields_by_name['endpoint_id'].message_type = _ENDPOINTID
-_ENDPOINT.fields_by_name['kpi_sample_types'].enum_type = kpi__sample__types__pb2._KPISAMPLETYPE
-_CONFIGRULE.fields_by_name['action'].enum_type = _CONFIGACTIONENUM
-_TERAFLOWCONTROLLER.fields_by_name['context_id'].message_type = _CONTEXTID
-_AUTHENTICATIONRESULT.fields_by_name['context_id'].message_type = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['Uuid'] = _UUID
-DESCRIPTOR.message_types_by_name['Event'] = _EVENT
-DESCRIPTOR.message_types_by_name['ContextId'] = _CONTEXTID
-DESCRIPTOR.message_types_by_name['Context'] = _CONTEXT
-DESCRIPTOR.message_types_by_name['ContextIdList'] = _CONTEXTIDLIST
-DESCRIPTOR.message_types_by_name['ContextList'] = _CONTEXTLIST
-DESCRIPTOR.message_types_by_name['ContextEvent'] = _CONTEXTEVENT
-DESCRIPTOR.message_types_by_name['TopologyId'] = _TOPOLOGYID
-DESCRIPTOR.message_types_by_name['Topology'] = _TOPOLOGY
-DESCRIPTOR.message_types_by_name['TopologyIdList'] = _TOPOLOGYIDLIST
-DESCRIPTOR.message_types_by_name['TopologyList'] = _TOPOLOGYLIST
-DESCRIPTOR.message_types_by_name['TopologyEvent'] = _TOPOLOGYEVENT
-DESCRIPTOR.message_types_by_name['DeviceId'] = _DEVICEID
-DESCRIPTOR.message_types_by_name['Device'] = _DEVICE
-DESCRIPTOR.message_types_by_name['DeviceConfig'] = _DEVICECONFIG
-DESCRIPTOR.message_types_by_name['DeviceIdList'] = _DEVICEIDLIST
-DESCRIPTOR.message_types_by_name['DeviceList'] = _DEVICELIST
-DESCRIPTOR.message_types_by_name['DeviceEvent'] = _DEVICEEVENT
-DESCRIPTOR.message_types_by_name['LinkId'] = _LINKID
-DESCRIPTOR.message_types_by_name['Link'] = _LINK
-DESCRIPTOR.message_types_by_name['LinkIdList'] = _LINKIDLIST
-DESCRIPTOR.message_types_by_name['LinkList'] = _LINKLIST
-DESCRIPTOR.message_types_by_name['LinkEvent'] = _LINKEVENT
-DESCRIPTOR.message_types_by_name['ServiceId'] = _SERVICEID
-DESCRIPTOR.message_types_by_name['Service'] = _SERVICE
-DESCRIPTOR.message_types_by_name['ServiceStatus'] = _SERVICESTATUS
-DESCRIPTOR.message_types_by_name['ServiceConfig'] = _SERVICECONFIG
-DESCRIPTOR.message_types_by_name['ServiceIdList'] = _SERVICEIDLIST
-DESCRIPTOR.message_types_by_name['ServiceList'] = _SERVICELIST
-DESCRIPTOR.message_types_by_name['ServiceEvent'] = _SERVICEEVENT
-DESCRIPTOR.message_types_by_name['SliceId'] = _SLICEID
-DESCRIPTOR.message_types_by_name['Slice'] = _SLICE
-DESCRIPTOR.message_types_by_name['SliceStatus'] = _SLICESTATUS
-DESCRIPTOR.message_types_by_name['SliceIdList'] = _SLICEIDLIST
-DESCRIPTOR.message_types_by_name['SliceList'] = _SLICELIST
-DESCRIPTOR.message_types_by_name['SliceEvent'] = _SLICEEVENT
-DESCRIPTOR.message_types_by_name['ConnectionId'] = _CONNECTIONID
-DESCRIPTOR.message_types_by_name['Connection'] = _CONNECTION
-DESCRIPTOR.message_types_by_name['ConnectionIdList'] = _CONNECTIONIDLIST
-DESCRIPTOR.message_types_by_name['ConnectionList'] = _CONNECTIONLIST
-DESCRIPTOR.message_types_by_name['ConnectionEvent'] = _CONNECTIONEVENT
-DESCRIPTOR.message_types_by_name['EndPointId'] = _ENDPOINTID
-DESCRIPTOR.message_types_by_name['EndPoint'] = _ENDPOINT
-DESCRIPTOR.message_types_by_name['ConfigRule'] = _CONFIGRULE
-DESCRIPTOR.message_types_by_name['Constraint'] = _CONSTRAINT
-DESCRIPTOR.message_types_by_name['TeraFlowController'] = _TERAFLOWCONTROLLER
-DESCRIPTOR.message_types_by_name['AuthenticationResult'] = _AUTHENTICATIONRESULT
-DESCRIPTOR.enum_types_by_name['EventTypeEnum'] = _EVENTTYPEENUM
-DESCRIPTOR.enum_types_by_name['DeviceDriverEnum'] = _DEVICEDRIVERENUM
-DESCRIPTOR.enum_types_by_name['DeviceOperationalStatusEnum'] = _DEVICEOPERATIONALSTATUSENUM
-DESCRIPTOR.enum_types_by_name['ServiceTypeEnum'] = _SERVICETYPEENUM
-DESCRIPTOR.enum_types_by_name['ServiceStatusEnum'] = _SERVICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['SliceStatusEnum'] = _SLICESTATUSENUM
-DESCRIPTOR.enum_types_by_name['ConfigActionEnum'] = _CONFIGACTIONENUM
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-Uuid = _reflection.GeneratedProtocolMessageType('Uuid', (_message.Message,), {
-  'DESCRIPTOR' : _UUID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Uuid)
-  })
-_sym_db.RegisterMessage(Uuid)
-
-Event = _reflection.GeneratedProtocolMessageType('Event', (_message.Message,), {
-  'DESCRIPTOR' : _EVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Event)
-  })
-_sym_db.RegisterMessage(Event)
-
-ContextId = _reflection.GeneratedProtocolMessageType('ContextId', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextId)
-  })
-_sym_db.RegisterMessage(ContextId)
-
-Context = _reflection.GeneratedProtocolMessageType('Context', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Context)
-  })
-_sym_db.RegisterMessage(Context)
-
-ContextIdList = _reflection.GeneratedProtocolMessageType('ContextIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextIdList)
-  })
-_sym_db.RegisterMessage(ContextIdList)
-
-ContextList = _reflection.GeneratedProtocolMessageType('ContextList', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextList)
-  })
-_sym_db.RegisterMessage(ContextList)
-
-ContextEvent = _reflection.GeneratedProtocolMessageType('ContextEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONTEXTEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ContextEvent)
-  })
-_sym_db.RegisterMessage(ContextEvent)
-
-TopologyId = _reflection.GeneratedProtocolMessageType('TopologyId', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyId)
-  })
-_sym_db.RegisterMessage(TopologyId)
-
-Topology = _reflection.GeneratedProtocolMessageType('Topology', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGY,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Topology)
-  })
-_sym_db.RegisterMessage(Topology)
-
-TopologyIdList = _reflection.GeneratedProtocolMessageType('TopologyIdList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyIdList)
-  })
-_sym_db.RegisterMessage(TopologyIdList)
-
-TopologyList = _reflection.GeneratedProtocolMessageType('TopologyList', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyList)
-  })
-_sym_db.RegisterMessage(TopologyList)
-
-TopologyEvent = _reflection.GeneratedProtocolMessageType('TopologyEvent', (_message.Message,), {
-  'DESCRIPTOR' : _TOPOLOGYEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TopologyEvent)
-  })
-_sym_db.RegisterMessage(TopologyEvent)
-
-DeviceId = _reflection.GeneratedProtocolMessageType('DeviceId', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceId)
-  })
-_sym_db.RegisterMessage(DeviceId)
-
-Device = _reflection.GeneratedProtocolMessageType('Device', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Device)
-  })
-_sym_db.RegisterMessage(Device)
-
-DeviceConfig = _reflection.GeneratedProtocolMessageType('DeviceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceConfig)
-  })
-_sym_db.RegisterMessage(DeviceConfig)
-
-DeviceIdList = _reflection.GeneratedProtocolMessageType('DeviceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceIdList)
-  })
-_sym_db.RegisterMessage(DeviceIdList)
-
-DeviceList = _reflection.GeneratedProtocolMessageType('DeviceList', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceList)
-  })
-_sym_db.RegisterMessage(DeviceList)
-
-DeviceEvent = _reflection.GeneratedProtocolMessageType('DeviceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _DEVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.DeviceEvent)
-  })
-_sym_db.RegisterMessage(DeviceEvent)
-
-LinkId = _reflection.GeneratedProtocolMessageType('LinkId', (_message.Message,), {
-  'DESCRIPTOR' : _LINKID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkId)
-  })
-_sym_db.RegisterMessage(LinkId)
-
-Link = _reflection.GeneratedProtocolMessageType('Link', (_message.Message,), {
-  'DESCRIPTOR' : _LINK,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Link)
-  })
-_sym_db.RegisterMessage(Link)
-
-LinkIdList = _reflection.GeneratedProtocolMessageType('LinkIdList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkIdList)
-  })
-_sym_db.RegisterMessage(LinkIdList)
-
-LinkList = _reflection.GeneratedProtocolMessageType('LinkList', (_message.Message,), {
-  'DESCRIPTOR' : _LINKLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkList)
-  })
-_sym_db.RegisterMessage(LinkList)
-
-LinkEvent = _reflection.GeneratedProtocolMessageType('LinkEvent', (_message.Message,), {
-  'DESCRIPTOR' : _LINKEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.LinkEvent)
-  })
-_sym_db.RegisterMessage(LinkEvent)
-
-ServiceId = _reflection.GeneratedProtocolMessageType('ServiceId', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceId)
-  })
-_sym_db.RegisterMessage(ServiceId)
-
-Service = _reflection.GeneratedProtocolMessageType('Service', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Service)
-  })
-_sym_db.RegisterMessage(Service)
-
-ServiceStatus = _reflection.GeneratedProtocolMessageType('ServiceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceStatus)
-  })
-_sym_db.RegisterMessage(ServiceStatus)
-
-ServiceConfig = _reflection.GeneratedProtocolMessageType('ServiceConfig', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICECONFIG,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceConfig)
-  })
-_sym_db.RegisterMessage(ServiceConfig)
-
-ServiceIdList = _reflection.GeneratedProtocolMessageType('ServiceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceIdList)
-  })
-_sym_db.RegisterMessage(ServiceIdList)
-
-ServiceList = _reflection.GeneratedProtocolMessageType('ServiceList', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceList)
-  })
-_sym_db.RegisterMessage(ServiceList)
-
-ServiceEvent = _reflection.GeneratedProtocolMessageType('ServiceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SERVICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ServiceEvent)
-  })
-_sym_db.RegisterMessage(ServiceEvent)
-
-SliceId = _reflection.GeneratedProtocolMessageType('SliceId', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceId)
-  })
-_sym_db.RegisterMessage(SliceId)
-
-Slice = _reflection.GeneratedProtocolMessageType('Slice', (_message.Message,), {
-  'DESCRIPTOR' : _SLICE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Slice)
-  })
-_sym_db.RegisterMessage(Slice)
-
-SliceStatus = _reflection.GeneratedProtocolMessageType('SliceStatus', (_message.Message,), {
-  'DESCRIPTOR' : _SLICESTATUS,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceStatus)
-  })
-_sym_db.RegisterMessage(SliceStatus)
-
-SliceIdList = _reflection.GeneratedProtocolMessageType('SliceIdList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceIdList)
-  })
-_sym_db.RegisterMessage(SliceIdList)
-
-SliceList = _reflection.GeneratedProtocolMessageType('SliceList', (_message.Message,), {
-  'DESCRIPTOR' : _SLICELIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceList)
-  })
-_sym_db.RegisterMessage(SliceList)
-
-SliceEvent = _reflection.GeneratedProtocolMessageType('SliceEvent', (_message.Message,), {
-  'DESCRIPTOR' : _SLICEEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.SliceEvent)
-  })
-_sym_db.RegisterMessage(SliceEvent)
-
-ConnectionId = _reflection.GeneratedProtocolMessageType('ConnectionId', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionId)
-  })
-_sym_db.RegisterMessage(ConnectionId)
-
-Connection = _reflection.GeneratedProtocolMessageType('Connection', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTION,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Connection)
-  })
-_sym_db.RegisterMessage(Connection)
-
-ConnectionIdList = _reflection.GeneratedProtocolMessageType('ConnectionIdList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONIDLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionIdList)
-  })
-_sym_db.RegisterMessage(ConnectionIdList)
-
-ConnectionList = _reflection.GeneratedProtocolMessageType('ConnectionList', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONLIST,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionList)
-  })
-_sym_db.RegisterMessage(ConnectionList)
-
-ConnectionEvent = _reflection.GeneratedProtocolMessageType('ConnectionEvent', (_message.Message,), {
-  'DESCRIPTOR' : _CONNECTIONEVENT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConnectionEvent)
-  })
-_sym_db.RegisterMessage(ConnectionEvent)
-
-EndPointId = _reflection.GeneratedProtocolMessageType('EndPointId', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINTID,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPointId)
-  })
-_sym_db.RegisterMessage(EndPointId)
-
-EndPoint = _reflection.GeneratedProtocolMessageType('EndPoint', (_message.Message,), {
-  'DESCRIPTOR' : _ENDPOINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.EndPoint)
-  })
-_sym_db.RegisterMessage(EndPoint)
-
-ConfigRule = _reflection.GeneratedProtocolMessageType('ConfigRule', (_message.Message,), {
-  'DESCRIPTOR' : _CONFIGRULE,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.ConfigRule)
-  })
-_sym_db.RegisterMessage(ConfigRule)
-
-Constraint = _reflection.GeneratedProtocolMessageType('Constraint', (_message.Message,), {
-  'DESCRIPTOR' : _CONSTRAINT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.Constraint)
-  })
-_sym_db.RegisterMessage(Constraint)
-
-TeraFlowController = _reflection.GeneratedProtocolMessageType('TeraFlowController', (_message.Message,), {
-  'DESCRIPTOR' : _TERAFLOWCONTROLLER,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.TeraFlowController)
-  })
-_sym_db.RegisterMessage(TeraFlowController)
-
-AuthenticationResult = _reflection.GeneratedProtocolMessageType('AuthenticationResult', (_message.Message,), {
-  'DESCRIPTOR' : _AUTHENTICATIONRESULT,
-  '__module__' : 'context_pb2'
-  # @@protoc_insertion_point(class_scope:context.AuthenticationResult)
-  })
-_sym_db.RegisterMessage(AuthenticationResult)
-
-
-
-_CONTEXTSERVICE = _descriptor.ServiceDescriptor(
-  name='ContextService',
-  full_name='context.ContextService',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=5273,
-  serialized_end=7688,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ListContextIds',
-    full_name='context.ContextService.ListContextIds',
-    index=0,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListContexts',
-    full_name='context.ContextService.ListContexts',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContext',
-    full_name='context.ContextService.GetContext',
-    index=2,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_CONTEXT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetContext',
-    full_name='context.ContextService.SetContext',
-    index=3,
-    containing_service=None,
-    input_type=_CONTEXT,
-    output_type=_CONTEXTID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveContext',
-    full_name='context.ContextService.RemoveContext',
-    index=4,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetContextEvents',
-    full_name='context.ContextService.GetContextEvents',
-    index=5,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONTEXTEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologyIds',
-    full_name='context.ContextService.ListTopologyIds',
-    index=6,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListTopologies',
-    full_name='context.ContextService.ListTopologies',
-    index=7,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_TOPOLOGYLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopology',
-    full_name='context.ContextService.GetTopology',
-    index=8,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_TOPOLOGY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetTopology',
-    full_name='context.ContextService.SetTopology',
-    index=9,
-    containing_service=None,
-    input_type=_TOPOLOGY,
-    output_type=_TOPOLOGYID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveTopology',
-    full_name='context.ContextService.RemoveTopology',
-    index=10,
-    containing_service=None,
-    input_type=_TOPOLOGYID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetTopologyEvents',
-    full_name='context.ContextService.GetTopologyEvents',
-    index=11,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_TOPOLOGYEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDeviceIds',
-    full_name='context.ContextService.ListDeviceIds',
-    index=12,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListDevices',
-    full_name='context.ContextService.ListDevices',
-    index=13,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDevice',
-    full_name='context.ContextService.GetDevice',
-    index=14,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_DEVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetDevice',
-    full_name='context.ContextService.SetDevice',
-    index=15,
-    containing_service=None,
-    input_type=_DEVICE,
-    output_type=_DEVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveDevice',
-    full_name='context.ContextService.RemoveDevice',
-    index=16,
-    containing_service=None,
-    input_type=_DEVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetDeviceEvents',
-    full_name='context.ContextService.GetDeviceEvents',
-    index=17,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_DEVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinkIds',
-    full_name='context.ContextService.ListLinkIds',
-    index=18,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListLinks',
-    full_name='context.ContextService.ListLinks',
-    index=19,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLink',
-    full_name='context.ContextService.GetLink',
-    index=20,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_LINK,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetLink',
-    full_name='context.ContextService.SetLink',
-    index=21,
-    containing_service=None,
-    input_type=_LINK,
-    output_type=_LINKID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveLink',
-    full_name='context.ContextService.RemoveLink',
-    index=22,
-    containing_service=None,
-    input_type=_LINKID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetLinkEvents',
-    full_name='context.ContextService.GetLinkEvents',
-    index=23,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_LINKEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServiceIds',
-    full_name='context.ContextService.ListServiceIds',
-    index=24,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListServices',
-    full_name='context.ContextService.ListServices',
-    index=25,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SERVICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetService',
-    full_name='context.ContextService.GetService',
-    index=26,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_SERVICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetService',
-    full_name='context.ContextService.SetService',
-    index=27,
-    containing_service=None,
-    input_type=_SERVICE,
-    output_type=_SERVICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveService',
-    full_name='context.ContextService.RemoveService',
-    index=28,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetServiceEvents',
-    full_name='context.ContextService.GetServiceEvents',
-    index=29,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SERVICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSliceIds',
-    full_name='context.ContextService.ListSliceIds',
-    index=30,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICEIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListSlices',
-    full_name='context.ContextService.ListSlices',
-    index=31,
-    containing_service=None,
-    input_type=_CONTEXTID,
-    output_type=_SLICELIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSlice',
-    full_name='context.ContextService.GetSlice',
-    index=32,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_SLICE,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetSlice',
-    full_name='context.ContextService.SetSlice',
-    index=33,
-    containing_service=None,
-    input_type=_SLICE,
-    output_type=_SLICEID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveSlice',
-    full_name='context.ContextService.RemoveSlice',
-    index=34,
-    containing_service=None,
-    input_type=_SLICEID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetSliceEvents',
-    full_name='context.ContextService.GetSliceEvents',
-    index=35,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_SLICEEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnectionIds',
-    full_name='context.ContextService.ListConnectionIds',
-    index=36,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONIDLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ListConnections',
-    full_name='context.ContextService.ListConnections',
-    index=37,
-    containing_service=None,
-    input_type=_SERVICEID,
-    output_type=_CONNECTIONLIST,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnection',
-    full_name='context.ContextService.GetConnection',
-    index=38,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_CONNECTION,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetConnection',
-    full_name='context.ContextService.SetConnection',
-    index=39,
-    containing_service=None,
-    input_type=_CONNECTION,
-    output_type=_CONNECTIONID,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='RemoveConnection',
-    full_name='context.ContextService.RemoveConnection',
-    index=40,
-    containing_service=None,
-    input_type=_CONNECTIONID,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetConnectionEvents',
-    full_name='context.ContextService.GetConnectionEvents',
-    index=41,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_CONNECTIONEVENT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_CONTEXTSERVICE)
-
-DESCRIPTOR.services_by_name['ContextService'] = _CONTEXTSERVICE
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/kpi_sample_types_pb2.py b/src/l3_centralizedattackdetector/proto/kpi_sample_types_pb2.py
deleted file mode 100644
index ea7fd2f82757d4c3db02d7e2c7817e2787b0b490..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/kpi_sample_types_pb2.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: kpi_sample_types.proto
-"""Generated protocol buffer code."""
-from google.protobuf.internal import enum_type_wrapper
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='kpi_sample_types.proto',
-  package='kpi_sample_types',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x16kpi_sample_types.proto\x12\x10kpi_sample_types*\xbe\x01\n\rKpiSampleType\x12\x19\n\x15KPISAMPLETYPE_UNKNOWN\x10\x00\x12%\n!KPISAMPLETYPE_PACKETS_TRANSMITTED\x10\x65\x12\"\n\x1eKPISAMPLETYPE_PACKETS_RECEIVED\x10\x66\x12$\n\x1fKPISAMPLETYPE_BYTES_TRANSMITTED\x10\xc9\x01\x12!\n\x1cKPISAMPLETYPE_BYTES_RECEIVED\x10\xca\x01\x62\x06proto3'
-)
-
-_KPISAMPLETYPE = _descriptor.EnumDescriptor(
-  name='KpiSampleType',
-  full_name='kpi_sample_types.KpiSampleType',
-  filename=None,
-  file=DESCRIPTOR,
-  create_key=_descriptor._internal_create_key,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_UNKNOWN', index=0, number=0,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_TRANSMITTED', index=1, number=101,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_PACKETS_RECEIVED', index=2, number=102,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_TRANSMITTED', index=3, number=201,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-    _descriptor.EnumValueDescriptor(
-      name='KPISAMPLETYPE_BYTES_RECEIVED', index=4, number=202,
-      serialized_options=None,
-      type=None,
-      create_key=_descriptor._internal_create_key),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=45,
-  serialized_end=235,
-)
-_sym_db.RegisterEnumDescriptor(_KPISAMPLETYPE)
-
-KpiSampleType = enum_type_wrapper.EnumTypeWrapper(_KPISAMPLETYPE)
-KPISAMPLETYPE_UNKNOWN = 0
-KPISAMPLETYPE_PACKETS_TRANSMITTED = 101
-KPISAMPLETYPE_PACKETS_RECEIVED = 102
-KPISAMPLETYPE_BYTES_TRANSMITTED = 201
-KPISAMPLETYPE_BYTES_RECEIVED = 202
-
-
-DESCRIPTOR.enum_types_by_name['KpiSampleType'] = _KPISAMPLETYPE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/l3_attackmitigator_pb2.py b/src/l3_centralizedattackdetector/proto/l3_attackmitigator_pb2.py
deleted file mode 100644
index e148d0a2cfda7b7ea00b40218dcfe3dcb70f1f8f..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/l3_attackmitigator_pb2.py
+++ /dev/null
@@ -1,178 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_attackmitigator.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-from . import context_pb2 as context__pb2
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_attackmitigator.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\x18l3_attackmitigator.proto\x1a\rcontext.proto\"\xd5\x01\n\x17L3AttackmitigatorOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x80\x01\n\x11L3Attackmitigator\x12\x38\n\nSendOutput\x12\x18.L3AttackmitigatorOutput\x1a\x0e.context.Empty\"\x00\x12\x31\n\rGetMitigation\x12\x0e.context.Empty\x1a\x0e.context.Empty\"\x00\x62\x06proto3'
-  ,
-  dependencies=[context__pb2.DESCRIPTOR,])
-
-
-
-
-_L3ATTACKMITIGATOROUTPUT = _descriptor.Descriptor(
-  name='L3AttackmitigatorOutput',
-  full_name='L3AttackmitigatorOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3AttackmitigatorOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3AttackmitigatorOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3AttackmitigatorOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3AttackmitigatorOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3AttackmitigatorOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3AttackmitigatorOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3AttackmitigatorOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3AttackmitigatorOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3AttackmitigatorOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3AttackmitigatorOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3AttackmitigatorOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=44,
-  serialized_end=257,
-)
-
-DESCRIPTOR.message_types_by_name['L3AttackmitigatorOutput'] = _L3ATTACKMITIGATOROUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3AttackmitigatorOutput = _reflection.GeneratedProtocolMessageType('L3AttackmitigatorOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3ATTACKMITIGATOROUTPUT,
-  '__module__' : 'l3_attackmitigator_pb2'
-  # @@protoc_insertion_point(class_scope:L3AttackmitigatorOutput)
-  })
-_sym_db.RegisterMessage(L3AttackmitigatorOutput)
-
-
-
-_L3ATTACKMITIGATOR = _descriptor.ServiceDescriptor(
-  name='L3Attackmitigator',
-  full_name='L3Attackmitigator',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=260,
-  serialized_end=388,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendOutput',
-    full_name='L3Attackmitigator.SendOutput',
-    index=0,
-    containing_service=None,
-    input_type=_L3ATTACKMITIGATOROUTPUT,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetMitigation',
-    full_name='L3Attackmitigator.GetMitigation',
-    index=1,
-    containing_service=None,
-    input_type=context__pb2._EMPTY,
-    output_type=context__pb2._EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3ATTACKMITIGATOR)
-
-DESCRIPTOR.services_by_name['L3Attackmitigator'] = _L3ATTACKMITIGATOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2.py b/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2.py
deleted file mode 100644
index 517fdb84b06c2c15b62a5616f33887ba337abf18..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_centralizedattackdetector.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_centralizedattackdetector.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\"l3_centralizedattackdetector.proto\"\xcb\x03\n\"L3CentralizedattackdetectorMetrics\x12 \n\x18n_packets_server_seconds\x18\x01 \x01(\x02\x12 \n\x18n_packets_client_seconds\x18\x02 \x01(\x02\x12\x1d\n\x15n_bits_server_seconds\x18\x03 \x01(\x02\x12\x1d\n\x15n_bits_client_seconds\x18\x04 \x01(\x02\x12&\n\x1en_bits_server_n_packets_server\x18\x05 \x01(\x02\x12&\n\x1en_bits_client_n_packets_client\x18\x06 \x01(\x02\x12)\n!n_packets_server_n_packets_client\x18\x07 \x01(\x02\x12#\n\x1bn_bits_server_n_bits_client\x18\x08 \x01(\x02\x12\x0c\n\x04ip_o\x18\t \x01(\t\x12\x0e\n\x06port_o\x18\n \x01(\t\x12\x0c\n\x04ip_d\x18\x0b \x01(\t\x12\x0e\n\x06port_d\x18\x0c \x01(\t\x12\x0f\n\x07\x66low_id\x18\r \x01(\t\x12\x10\n\x08protocol\x18\x0e \x01(\t\x12\x12\n\ntime_start\x18\x0f \x01(\x02\x12\x10\n\x08time_end\x18\x10 \x01(\x02\"\x18\n\x05\x45mpty\x12\x0f\n\x07message\x18\x01 \x01(\t\"\xe4\x01\n&L3CentralizedattackdetectorModelOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x99\x01\n\x1bL3Centralizedattackdetector\x12:\n\tSendInput\x12#.L3CentralizedattackdetectorMetrics\x1a\x06.Empty\"\x00\x12>\n\tGetOutput\x12\x06.Empty\x1a\'.L3CentralizedattackdetectorModelOutput\"\x00\x62\x06proto3'
-)
-
-
-
-
-_L3CENTRALIZEDATTACKDETECTORMETRICS = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorMetrics',
-  full_name='L3CentralizedattackdetectorMetrics',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_seconds', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_client_seconds', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_seconds', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_seconds', index=3,
-      number=4, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_packets_server', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_packets_server', index=4,
-      number=5, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_n_packets_client', index=5,
-      number=6, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_n_packets_client', index=6,
-      number=7, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_bits_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_bits_client', index=7,
-      number=8, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorMetrics.ip_o', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_o', full_name='L3CentralizedattackdetectorMetrics.port_o', index=9,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_d', full_name='L3CentralizedattackdetectorMetrics.ip_d', index=10,
-      number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorMetrics.port_d', index=11,
-      number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorMetrics.flow_id', index=12,
-      number=13, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorMetrics.protocol', index=13,
-      number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorMetrics.time_start', index=14,
-      number=15, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorMetrics.time_end', index=15,
-      number=16, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=39,
-  serialized_end=498,
-)
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='message', full_name='Empty.message', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=500,
-  serialized_end=524,
-)
-
-
-_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorModelOutput',
-  full_name='L3CentralizedattackdetectorModelOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3CentralizedattackdetectorModelOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3CentralizedattackdetectorModelOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorModelOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3CentralizedattackdetectorModelOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3CentralizedattackdetectorModelOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorModelOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorModelOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorModelOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3CentralizedattackdetectorModelOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorModelOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorModelOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=527,
-  serialized_end=755,
-)
-
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorMetrics'] = _L3CENTRALIZEDATTACKDETECTORMETRICS
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorModelOutput'] = _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3CentralizedattackdetectorMetrics = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorMetrics', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMETRICS,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorMetrics)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorMetrics)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-L3CentralizedattackdetectorModelOutput = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorModelOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorModelOutput)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorModelOutput)
-
-
-
-_L3CENTRALIZEDATTACKDETECTOR = _descriptor.ServiceDescriptor(
-  name='L3Centralizedattackdetector',
-  full_name='L3Centralizedattackdetector',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=758,
-  serialized_end=911,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendInput',
-    full_name='L3Centralizedattackdetector.SendInput',
-    index=0,
-    containing_service=None,
-    input_type=_L3CENTRALIZEDATTACKDETECTORMETRICS,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetOutput',
-    full_name='L3Centralizedattackdetector.GetOutput',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3CENTRALIZEDATTACKDETECTOR)
-
-DESCRIPTOR.services_by_name['L3Centralizedattackdetector'] = _L3CENTRALIZEDATTACKDETECTOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py b/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
deleted file mode 100644
index 29136b4da95c9fc2ad7d4827521b26e872186dcf..0000000000000000000000000000000000000000
--- a/src/l3_centralizedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from . import l3_centralizedattackdetector_pb2 as l3__centralizedattackdetector__pb2
-
-
-class L3CentralizedattackdetectorStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.SendInput = channel.unary_unary(
-                '/L3Centralizedattackdetector/SendInput',
-                request_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                )
-        self.GetOutput = channel.unary_unary(
-                '/L3Centralizedattackdetector/GetOutput',
-                request_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-                )
-
-
-class L3CentralizedattackdetectorServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def SendInput(self, request, context):
-        """Sends a greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetOutput(self, request, context):
-        """Sends another greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_L3CentralizedattackdetectorServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'SendInput': grpc.unary_unary_rpc_method_handler(
-                    servicer.SendInput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            ),
-            'GetOutput': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetOutput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'L3Centralizedattackdetector', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class L3Centralizedattackdetector(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def SendInput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/SendInput',
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-            l3__centralizedattackdetector__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetOutput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/GetOutput',
-            l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/l3_centralizedattackdetector/requirements.in b/src/l3_centralizedattackdetector/requirements.in
index e14d501b5a23d29e4950a56f28ee08fc54568d4d..9a1a05518bbe63bba70192fcb19e71c68d143246 100644
--- a/src/l3_centralizedattackdetector/requirements.in
+++ b/src/l3_centralizedattackdetector/requirements.in
@@ -1,10 +1,3 @@
-grpcio-health-checking
-grpcio
-grpcio-tools
-prometheus-client
-pytest
-pytest-benchmark
-numpy
-scikit-learn
-onnxruntime
-coverage
\ No newline at end of file
+numpy==1.23.*
+scikit-learn==1.12.*
+onnxruntime==1.1.*
diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py
index 0eb101f0e36fc59e5c6e8b1346609693259e0ccf..bad8cee7eadc26ceaf4dddd8a8452b3b8636e1d9 100644
--- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py
+++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorService.py
@@ -18,7 +18,7 @@ from concurrent import futures
 from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH
 from grpc_health.v1.health_pb2 import HealthCheckResponse
 from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     add_L3CentralizedattackdetectorServicer_to_server,
 )
 from l3_centralizedattackdetector.service.l3_centralizedattackdetectorServiceServicerImpl import (
diff --git a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
index 18006f5a60de4c6f5596d03e3b9482dc4040014d..ead32d248bf4f22ecab0ce9de4ae364aa4925995 100644
--- a/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
+++ b/src/l3_centralizedattackdetector/service/l3_centralizedattackdetectorServiceServicerImpl.py
@@ -19,17 +19,17 @@ import grpc
 import numpy as np
 import onnxruntime as rt
 import logging
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     Empty,
 )
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     L3CentralizedattackdetectorServicer,
 )
 
-from l3_centralizedattackdetector.proto.l3_attackmitigator_pb2 import (
+from common.proto.l3_attackmitigator_pb2 import (
     Output,
 )
-from l3_centralizedattackdetector.proto.l3_attackmitigator_pb2_grpc import (
+from common.proto.l3_attackmitigator_pb2_grpc import (
     L3AttackmitigatorStub,
 )
 
diff --git a/src/l3_centralizedattackdetector/tests/test_unitary.py b/src/l3_centralizedattackdetector/tests/test_unitary.py
index c63975cc896373f4d33a7dc8dc4c6d15692c8fe6..a939b9efa11c9ceeb96ccb6d04c9ec929ab55cda 100644
--- a/src/l3_centralizedattackdetector/tests/test_unitary.py
+++ b/src/l3_centralizedattackdetector/tests/test_unitary.py
@@ -17,7 +17,7 @@ import pytest
 from l3_centralizedattackdetector.Config import GRPC_SERVICE_PORT, GRPC_MAX_WORKERS, GRPC_GRACE_PERIOD
 from l3_centralizedattackdetector.client.l3_centralizedattackdetectorClient import l3_centralizedattackdetectorClient
 from l3_centralizedattackdetector.service.l3_centralizedattackdetectorService import l3_centralizedattackdetectorService
-from l3_centralizedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     ModelInput,
 )
 
diff --git a/src/l3_distributedattackdetector/.gitlab-ci.yml b/src/l3_distributedattackdetector/.gitlab-ci.yml
index 7ced7a62c19c717e2c4091f08c73579a79ad383b..c373d223715f77a833fdb3ea1c090e61f2e2c303 100644
--- a/src/l3_distributedattackdetector/.gitlab-ci.yml
+++ b/src/l3_distributedattackdetector/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag, and push the Docker images to the GitLab Docker registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build l3_distributedattackdetector:
   variables:
     IMAGE_NAME: 'l3_distributedattackdetector' # name of the microservice
@@ -21,22 +21,24 @@ build l3_distributedattackdetector:
   before_script:
     - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
   script:
-    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile ./src/
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/Dockerfile .
     - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
     - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
   after_script:
     - docker images --filter="dangling=true" --quiet | xargs -r docker rmi
   rules:
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
       - manifests/${IMAGE_NAME}service.yaml
       - .gitlab-ci.yml
 
-# Pull, execute, and run unitary tests for the Docker image from the GitLab registry
+# Apply unit test to the component
 unit test l3_distributedattackdetector:
   variables:
     IMAGE_NAME: 'l3_distributedattackdetector' # name of the microservice
@@ -46,7 +48,7 @@ unit test l3_distributedattackdetector:
     - build l3_distributedattackdetector
   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 network list | grep teraflowbridge; then echo "teraflowbridge is already created"; else docker network create -d bridge teraflowbridge; 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"
@@ -62,8 +64,10 @@ unit test l3_distributedattackdetector:
     - 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)'
-    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' 
+    - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"'
     - changes:
+      - src/common/**/*.py
+      - proto/*.proto
       - src/$IMAGE_NAME/**/*.{py,in,yml}
       - src/$IMAGE_NAME/Dockerfile
       - src/$IMAGE_NAME/tests/*.py
diff --git a/src/l3_distributedattackdetector/Dockerfile b/src/l3_distributedattackdetector/Dockerfile
index b0f1714e80055a328e90f070e9f957f8ec99708b..2c4f63aa5d310b09f92f26c8e53d3cee276dc485 100644
--- a/src/l3_distributedattackdetector/Dockerfile
+++ b/src/l3_distributedattackdetector/Dockerfile
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM python:3-slim
+FROM python:3.9-slim
 
 # Install dependencies
 RUN apt-get --yes --quiet --quiet update && \
@@ -28,23 +28,42 @@ RUN GRPC_HEALTH_PROBE_VERSION=v0.2.0 && \
     chmod +x /bin/grpc_health_probe
 
 # Get generic Python packages
-RUN python3 -m pip install --upgrade pip setuptools wheel pip-tools
+RUN python3 -m pip install --upgrade pip
+RUN python3 -m pip install --upgrade setuptools wheel
+RUN python3 -m pip install --upgrade pip-tools
 
-# Set working directory
+# Get common Python packages
+# Note: this step enables sharing the previous Docker build steps among all the Python components
 WORKDIR /var/teraflow
+COPY common_requirements.in common_requirements.in
+RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in
+RUN python3 -m pip install -r common_requirements.txt
 
-# Create module sub-folders
-RUN mkdir -p /var/teraflow/l3_distributedattackdetector
+# Add common files into working directory
+WORKDIR /var/teraflow/common
+COPY src/common/. ./
+RUN rm -rf proto
+
+# Create proto sub-folder, copy .proto files, and generate Python code
+RUN mkdir -p /var/teraflow/common/proto
+WORKDIR /var/teraflow/common/proto
+RUN touch __init__.py
+COPY proto/*.proto ./
+RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto
+RUN rm *.proto
+RUN find . -type f -exec sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' {} \;
 
-# Get Python packages per module
-COPY l3_distributedattackdetector/requirements.in l3_distributedattackdetector/requirements.in
-RUN pip-compile --output-file=l3_distributedattackdetector/requirements.txt l3_distributedattackdetector/requirements.in
-RUN python3 -m pip install -r l3_distributedattackdetector/requirements.in
+# Create component sub-folders, get specific Python packages
+RUN mkdir -p /var/teraflow/l3_distributedattackdetector
+WORKDIR /var/teraflow/l3_distributedattackdetector
+COPY src/l3_distributedattackdetector/requirements.in requirements.in
+RUN pip-compile --quiet --output-file=requirements.txt requirements.in
+RUN python3 -m pip install -r requirements.txt
 
-# Add files into working directory
-COPY common/. common
+# Add component files into working directory
+WORKDIR /var/teraflow
 COPY l3_distributedattackdetector/. l3_distributedattackdetector
 
-# Start service service
+# Start the service
 RUN nohup bash -c "service/tstat -l -i lo -s service/piped &" && sleep 5 
 ENTRYPOINT ["python", "-m", "l3_distributedattackdetector.service"]
diff --git a/src/l3_distributedattackdetector/genproto.sh b/src/l3_distributedattackdetector/genproto.sh
deleted file mode 100755
index c1f54c0dc1cdb6ef2681504ec0783f5479084fa8..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/genproto.sh
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash -eu
-#
-# 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.
-
-# Make folder containing the script the root folder for its execution
-cd $(dirname $0)
-
-rm -rf proto/*.py
-rm -rf proto/__pycache__
-tee proto/__init__.py << EOF > /dev/null
-# 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.
-
-EOF
-
-python -m grpc_tools.protoc -I../../proto --python_out=proto --grpc_python_out=proto l3_centralizedattackdetector.proto
-
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2.py
-sed -i -E 's/(import\ .*)_pb2/from . \1_pb2/g' proto/l3_centralizedattackdetector_pb2_grpc.py
diff --git a/src/l3_distributedattackdetector/proto/__init__.py b/src/l3_distributedattackdetector/proto/__init__.py
deleted file mode 100644
index 70a33251242c51f49140e596b8208a19dd5245f7..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/proto/__init__.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# 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/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2.py b/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2.py
deleted file mode 100644
index 517fdb84b06c2c15b62a5616f33887ba337abf18..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by the protocol buffer compiler.  DO NOT EDIT!
-# source: l3_centralizedattackdetector.proto
-"""Generated protocol buffer code."""
-from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
-from google.protobuf import symbol_database as _symbol_database
-# @@protoc_insertion_point(imports)
-
-_sym_db = _symbol_database.Default()
-
-
-
-
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='l3_centralizedattackdetector.proto',
-  package='',
-  syntax='proto3',
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_pb=b'\n\"l3_centralizedattackdetector.proto\"\xcb\x03\n\"L3CentralizedattackdetectorMetrics\x12 \n\x18n_packets_server_seconds\x18\x01 \x01(\x02\x12 \n\x18n_packets_client_seconds\x18\x02 \x01(\x02\x12\x1d\n\x15n_bits_server_seconds\x18\x03 \x01(\x02\x12\x1d\n\x15n_bits_client_seconds\x18\x04 \x01(\x02\x12&\n\x1en_bits_server_n_packets_server\x18\x05 \x01(\x02\x12&\n\x1en_bits_client_n_packets_client\x18\x06 \x01(\x02\x12)\n!n_packets_server_n_packets_client\x18\x07 \x01(\x02\x12#\n\x1bn_bits_server_n_bits_client\x18\x08 \x01(\x02\x12\x0c\n\x04ip_o\x18\t \x01(\t\x12\x0e\n\x06port_o\x18\n \x01(\t\x12\x0c\n\x04ip_d\x18\x0b \x01(\t\x12\x0e\n\x06port_d\x18\x0c \x01(\t\x12\x0f\n\x07\x66low_id\x18\r \x01(\t\x12\x10\n\x08protocol\x18\x0e \x01(\t\x12\x12\n\ntime_start\x18\x0f \x01(\x02\x12\x10\n\x08time_end\x18\x10 \x01(\x02\"\x18\n\x05\x45mpty\x12\x0f\n\x07message\x18\x01 \x01(\t\"\xe4\x01\n&L3CentralizedattackdetectorModelOutput\x12\x12\n\nconfidence\x18\x01 \x01(\x02\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x0c\n\x04ip_o\x18\x03 \x01(\t\x12\x10\n\x08tag_name\x18\x04 \x01(\t\x12\x0b\n\x03tag\x18\x05 \x01(\x05\x12\x0f\n\x07\x66low_id\x18\x06 \x01(\t\x12\x10\n\x08protocol\x18\x07 \x01(\t\x12\x0e\n\x06port_d\x18\x08 \x01(\t\x12\r\n\x05ml_id\x18\t \x01(\t\x12\x12\n\ntime_start\x18\n \x01(\x02\x12\x10\n\x08time_end\x18\x0b \x01(\x02\x32\x99\x01\n\x1bL3Centralizedattackdetector\x12:\n\tSendInput\x12#.L3CentralizedattackdetectorMetrics\x1a\x06.Empty\"\x00\x12>\n\tGetOutput\x12\x06.Empty\x1a\'.L3CentralizedattackdetectorModelOutput\"\x00\x62\x06proto3'
-)
-
-
-
-
-_L3CENTRALIZEDATTACKDETECTORMETRICS = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorMetrics',
-  full_name='L3CentralizedattackdetectorMetrics',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_seconds', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_packets_client_seconds', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_seconds', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_seconds', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_seconds', index=3,
-      number=4, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_packets_server', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_packets_server', index=4,
-      number=5, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_client_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_client_n_packets_client', index=5,
-      number=6, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_packets_server_n_packets_client', full_name='L3CentralizedattackdetectorMetrics.n_packets_server_n_packets_client', index=6,
-      number=7, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='n_bits_server_n_bits_client', full_name='L3CentralizedattackdetectorMetrics.n_bits_server_n_bits_client', index=7,
-      number=8, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorMetrics.ip_o', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_o', full_name='L3CentralizedattackdetectorMetrics.port_o', index=9,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_d', full_name='L3CentralizedattackdetectorMetrics.ip_d', index=10,
-      number=11, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorMetrics.port_d', index=11,
-      number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorMetrics.flow_id', index=12,
-      number=13, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorMetrics.protocol', index=13,
-      number=14, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorMetrics.time_start', index=14,
-      number=15, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorMetrics.time_end', index=15,
-      number=16, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=39,
-  serialized_end=498,
-)
-
-
-_EMPTY = _descriptor.Descriptor(
-  name='Empty',
-  full_name='Empty',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='message', full_name='Empty.message', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=500,
-  serialized_end=524,
-)
-
-
-_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT = _descriptor.Descriptor(
-  name='L3CentralizedattackdetectorModelOutput',
-  full_name='L3CentralizedattackdetectorModelOutput',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  create_key=_descriptor._internal_create_key,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='confidence', full_name='L3CentralizedattackdetectorModelOutput.confidence', index=0,
-      number=1, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='L3CentralizedattackdetectorModelOutput.timestamp', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ip_o', full_name='L3CentralizedattackdetectorModelOutput.ip_o', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag_name', full_name='L3CentralizedattackdetectorModelOutput.tag_name', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='tag', full_name='L3CentralizedattackdetectorModelOutput.tag', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='flow_id', full_name='L3CentralizedattackdetectorModelOutput.flow_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='protocol', full_name='L3CentralizedattackdetectorModelOutput.protocol', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='port_d', full_name='L3CentralizedattackdetectorModelOutput.port_d', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='ml_id', full_name='L3CentralizedattackdetectorModelOutput.ml_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=b"".decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_start', full_name='L3CentralizedattackdetectorModelOutput.time_start', index=9,
-      number=10, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-    _descriptor.FieldDescriptor(
-      name='time_end', full_name='L3CentralizedattackdetectorModelOutput.time_end', index=10,
-      number=11, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR,  create_key=_descriptor._internal_create_key),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=527,
-  serialized_end=755,
-)
-
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorMetrics'] = _L3CENTRALIZEDATTACKDETECTORMETRICS
-DESCRIPTOR.message_types_by_name['Empty'] = _EMPTY
-DESCRIPTOR.message_types_by_name['L3CentralizedattackdetectorModelOutput'] = _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-L3CentralizedattackdetectorMetrics = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorMetrics', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMETRICS,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorMetrics)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorMetrics)
-
-Empty = _reflection.GeneratedProtocolMessageType('Empty', (_message.Message,), {
-  'DESCRIPTOR' : _EMPTY,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:Empty)
-  })
-_sym_db.RegisterMessage(Empty)
-
-L3CentralizedattackdetectorModelOutput = _reflection.GeneratedProtocolMessageType('L3CentralizedattackdetectorModelOutput', (_message.Message,), {
-  'DESCRIPTOR' : _L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-  '__module__' : 'l3_centralizedattackdetector_pb2'
-  # @@protoc_insertion_point(class_scope:L3CentralizedattackdetectorModelOutput)
-  })
-_sym_db.RegisterMessage(L3CentralizedattackdetectorModelOutput)
-
-
-
-_L3CENTRALIZEDATTACKDETECTOR = _descriptor.ServiceDescriptor(
-  name='L3Centralizedattackdetector',
-  full_name='L3Centralizedattackdetector',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  create_key=_descriptor._internal_create_key,
-  serialized_start=758,
-  serialized_end=911,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='SendInput',
-    full_name='L3Centralizedattackdetector.SendInput',
-    index=0,
-    containing_service=None,
-    input_type=_L3CENTRALIZEDATTACKDETECTORMETRICS,
-    output_type=_EMPTY,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetOutput',
-    full_name='L3Centralizedattackdetector.GetOutput',
-    index=1,
-    containing_service=None,
-    input_type=_EMPTY,
-    output_type=_L3CENTRALIZEDATTACKDETECTORMODELOUTPUT,
-    serialized_options=None,
-    create_key=_descriptor._internal_create_key,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_L3CENTRALIZEDATTACKDETECTOR)
-
-DESCRIPTOR.services_by_name['L3Centralizedattackdetector'] = _L3CENTRALIZEDATTACKDETECTOR
-
-# @@protoc_insertion_point(module_scope)
diff --git a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py b/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
deleted file mode 100644
index 29136b4da95c9fc2ad7d4827521b26e872186dcf..0000000000000000000000000000000000000000
--- a/src/l3_distributedattackdetector/proto/l3_centralizedattackdetector_pb2_grpc.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
-"""Client and server classes corresponding to protobuf-defined services."""
-import grpc
-
-from . import l3_centralizedattackdetector_pb2 as l3__centralizedattackdetector__pb2
-
-
-class L3CentralizedattackdetectorStub(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def __init__(self, channel):
-        """Constructor.
-
-        Args:
-            channel: A grpc.Channel.
-        """
-        self.SendInput = channel.unary_unary(
-                '/L3Centralizedattackdetector/SendInput',
-                request_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                )
-        self.GetOutput = channel.unary_unary(
-                '/L3Centralizedattackdetector/GetOutput',
-                request_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-                response_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-                )
-
-
-class L3CentralizedattackdetectorServicer(object):
-    """Missing associated documentation comment in .proto file."""
-
-    def SendInput(self, request, context):
-        """Sends a greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-    def GetOutput(self, request, context):
-        """Sends another greeting
-        """
-        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-        context.set_details('Method not implemented!')
-        raise NotImplementedError('Method not implemented!')
-
-
-def add_L3CentralizedattackdetectorServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-            'SendInput': grpc.unary_unary_rpc_method_handler(
-                    servicer.SendInput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            ),
-            'GetOutput': grpc.unary_unary_rpc_method_handler(
-                    servicer.GetOutput,
-                    request_deserializer=l3__centralizedattackdetector__pb2.Empty.FromString,
-                    response_serializer=l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.SerializeToString,
-            ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-            'L3Centralizedattackdetector', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
- # This class is part of an EXPERIMENTAL API.
-class L3Centralizedattackdetector(object):
-    """Missing associated documentation comment in .proto file."""
-
-    @staticmethod
-    def SendInput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/SendInput',
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorMetrics.SerializeToString,
-            l3__centralizedattackdetector__pb2.Empty.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
-
-    @staticmethod
-    def GetOutput(request,
-            target,
-            options=(),
-            channel_credentials=None,
-            call_credentials=None,
-            insecure=False,
-            compression=None,
-            wait_for_ready=None,
-            timeout=None,
-            metadata=None):
-        return grpc.experimental.unary_unary(request, target, '/L3Centralizedattackdetector/GetOutput',
-            l3__centralizedattackdetector__pb2.Empty.SerializeToString,
-            l3__centralizedattackdetector__pb2.L3CentralizedattackdetectorModelOutput.FromString,
-            options, channel_credentials,
-            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
diff --git a/src/l3_distributedattackdetector/requirements.in b/src/l3_distributedattackdetector/requirements.in
index ede9c839d93cc377e93c525bc1e85243576faa00..772ae923931c8b09917e75a600ce2b5a0d2d4ecf 100644
--- a/src/l3_distributedattackdetector/requirements.in
+++ b/src/l3_distributedattackdetector/requirements.in
@@ -1,9 +1 @@
-grpcio-health-checking
-grpcio
-grpcio-tools
-prometheus-client
-pytest
-pytest-benchmark
-numpy
-scikit-learn
-coverage
\ No newline at end of file
+# no extra dependency
diff --git a/src/l3_distributedattackdetector/service/__main__.py b/src/l3_distributedattackdetector/service/__main__.py
index 29f943ce745bc1355ac063fea83a63b42e19f36b..1ce6831f22e63b482031f919f040ad1182c4e2d4 100644
--- a/src/l3_distributedattackdetector/service/__main__.py
+++ b/src/l3_distributedattackdetector/service/__main__.py
@@ -17,10 +17,10 @@ import sys
 import os 
 import time
 import grpc
-from l3_distributedattackdetector.proto.l3_centralizedattackdetector_pb2_grpc import (
+from common.proto.l3_centralizedattackdetector_pb2_grpc import (
     L3CentralizedattackdetectorStub,
 )
-from l3_distributedattackdetector.proto.l3_centralizedattackdetector_pb2 import (
+from common.proto.l3_centralizedattackdetector_pb2 import (
     ModelInput,
 )
 
diff --git a/src/monitoring/.gitlab-ci.yml b/src/monitoring/.gitlab-ci.yml
index 31789a0f1ea7914e70a155ac3fa45230679b8317..fac3f967bbf531ef5cc9b67b2a1afe47fb9990d5 100644
--- a/src/monitoring/.gitlab-ci.yml
+++ b/src/monitoring/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build monitoring:
   variables:
     IMAGE_NAME: 'monitoring' # name of the microservice
diff --git a/src/pathcomp/.gitlab-ci.yml b/src/pathcomp/.gitlab-ci.yml
index 671e1dc035bf8d5ebe497dfef7db0f995eaa5f84..fd52da6fb7bf8dc556b92e4db080c9927bb58a5d 100644
--- a/src/pathcomp/.gitlab-ci.yml
+++ b/src/pathcomp/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build pathcomp:
   variables:
     IMAGE_NAME: 'pathcomp' # name of the microservice
diff --git a/src/policy/pom.xml b/src/policy/pom.xml
index 003c3d48bc6edc8c32f0ad02009dc9eb6577f4cc..531cc7ecf96424b3180c1f4471ae0d002de85acc 100644
--- a/src/policy/pom.xml
+++ b/src/policy/pom.xml
@@ -302,6 +302,7 @@
                         <exclude>monitoring/*</exclude>
                         <exclude>service/*</exclude>
                         <exclude>kpi_sample_types/*</exclude>
+                        <exclude>acl/*</exclude>
                     </excludes>
                 </configuration>
                 <executions>
diff --git a/src/policy/src/main/java/eu/teraflow/policy/Serializer.java b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
new file mode 100644
index 0000000000000000000000000000000000000000..9970852124fb0a5334087ef703a6b0fb5b3ef9a8
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/Serializer.java
@@ -0,0 +1,2140 @@
+/*
+* 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 acl.Acl;
+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.Uuid;
+import eu.teraflow.policy.acl.AclAction;
+import eu.teraflow.policy.acl.AclEntry;
+import eu.teraflow.policy.acl.AclForwardActionEnum;
+import eu.teraflow.policy.acl.AclLogActionEnum;
+import eu.teraflow.policy.acl.AclMatch;
+import eu.teraflow.policy.acl.AclRuleSet;
+import eu.teraflow.policy.acl.AclRuleTypeEnum;
+import eu.teraflow.policy.context.model.ConfigActionEnum;
+import eu.teraflow.policy.context.model.ConfigRule;
+import eu.teraflow.policy.context.model.ConfigRuleAcl;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.Constraint;
+import eu.teraflow.policy.context.model.ConstraintCustom;
+import eu.teraflow.policy.context.model.ConstraintEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintSchedule;
+import eu.teraflow.policy.context.model.ConstraintSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintSlaLatency;
+import eu.teraflow.policy.context.model.ConstraintTypeCustom;
+import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintTypeSchedule;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency;
+import eu.teraflow.policy.context.model.Device;
+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.EndPoint;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Event;
+import eu.teraflow.policy.context.model.EventTypeEnum;
+import eu.teraflow.policy.context.model.GpsPosition;
+import eu.teraflow.policy.context.model.IsolationLevelEnum;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeGpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceConfig;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.ServiceStatus;
+import eu.teraflow.policy.context.model.ServiceStatusEnum;
+import eu.teraflow.policy.context.model.ServiceTypeEnum;
+import eu.teraflow.policy.context.model.SliceId;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+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.PolicyRuleService;
+import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+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.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValueRange;
+import eu.teraflow.policy.monitoring.model.StringKpiValue;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import java.util.stream.Collectors;
+import javax.inject.Singleton;
+import kpi_sample_types.KpiSampleTypes;
+import monitoring.Monitoring;
+import monitoring.Monitoring.KpiId;
+import policy.Policy;
+import policy.Policy.PolicyRuleId;
+import policy.PolicyAction;
+import policy.PolicyCondition;
+
+@Singleton
+public class Serializer {
+
+    public DeviceId serializeDeviceId(String expectedDeviceId) {
+        final var builder = DeviceId.newBuilder();
+        final var uuid = serializeUuid(expectedDeviceId);
+
+        builder.setDeviceUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(DeviceId deviceId) {
+        return deviceId.getDeviceUuid().getUuid();
+    }
+
+    public ContextId serializeContextId(String expectedContextId) {
+        final var builder = ContextId.newBuilder();
+        final var uuid = serializeUuid(expectedContextId);
+
+        builder.setContextUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(ContextId contextId) {
+        return contextId.getContextUuid().getUuid();
+    }
+
+    public PolicyRuleId serializePolicyRuleId(String expectedPolicyRuleId) {
+        final var builder = PolicyRuleId.newBuilder();
+        final var uuid = serializeUuid(expectedPolicyRuleId);
+
+        builder.setUuid(uuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(PolicyRuleId policyRuleId) {
+        return policyRuleId.getUuid().getUuid();
+    }
+
+    public ContextOuterClass.TopologyId serialize(TopologyId topologyId) {
+        final var builder = ContextOuterClass.TopologyId.newBuilder();
+
+        final var topologyIdContextId = topologyId.getContextId();
+        final var topologyIdId = topologyId.getId();
+
+        final var contextId = serializeContextId(topologyIdContextId);
+        final var topologyIdIdUuid = serializeUuid(topologyIdId);
+
+        builder.setContextId(contextId);
+        builder.setTopologyUuid(topologyIdIdUuid);
+
+        return builder.build();
+    }
+
+    public TopologyId deserialize(ContextOuterClass.TopologyId topologyId) {
+        final var topologyIdContextId = deserialize(topologyId.getContextId());
+        final var topologyIdId = deserialize(topologyId.getTopologyUuid());
+
+        return new TopologyId(topologyIdContextId, topologyIdId);
+    }
+
+    public ContextOuterClass.ConfigActionEnum serialize(ConfigActionEnum configActionEnum) {
+        switch (configActionEnum) {
+            case SET:
+                return ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET;
+            case DELETE:
+                return ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE;
+            case UNDEFINED:
+                return ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED;
+            default:
+                return ContextOuterClass.ConfigActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public ConfigActionEnum deserialize(
+            ContextOuterClass.ConfigActionEnum serializedConfigActionEnum) {
+        switch (serializedConfigActionEnum) {
+            case CONFIGACTION_SET:
+                return ConfigActionEnum.SET;
+            case CONFIGACTION_DELETE:
+                return ConfigActionEnum.DELETE;
+            case CONFIGACTION_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return ConfigActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclRuleTypeEnum serialize(AclRuleTypeEnum aclRuleTypeEnum) {
+        switch (aclRuleTypeEnum) {
+            case IPV4:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4;
+            case IPV6:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6;
+            case L2:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_L2;
+            case MPLS:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS;
+            case MIXED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED;
+            case UNDEFINED:
+                return Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED;
+            default:
+                return Acl.AclRuleTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclRuleTypeEnum deserialize(Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        switch (serializedAclRuleTypeEnum) {
+            case ACLRULETYPE_IPV4:
+                return AclRuleTypeEnum.IPV4;
+            case ACLRULETYPE_IPV6:
+                return AclRuleTypeEnum.IPV6;
+            case ACLRULETYPE_L2:
+                return AclRuleTypeEnum.L2;
+            case ACLRULETYPE_MPLS:
+                return AclRuleTypeEnum.MPLS;
+            case ACLRULETYPE_MIXED:
+                return AclRuleTypeEnum.MIXED;
+            case UNRECOGNIZED:
+            default:
+                return AclRuleTypeEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclMatch serialize(AclMatch aclMatch) {
+        final var builder = Acl.AclMatch.newBuilder();
+
+        final var dscp = aclMatch.getDscp();
+        final var protocol = aclMatch.getProtocol();
+        final var srcAddress = aclMatch.getSrcAddress();
+        final var dstAddress = aclMatch.getDstAddress();
+        final var srcPort = aclMatch.getSrcPort();
+        final var dstPort = aclMatch.getDstPort();
+        final var startMplsLabel = aclMatch.getStartMplsLabel();
+        final var endMplsLabel = aclMatch.getEndMplsLabel();
+
+        builder.setDscp(dscp);
+        builder.setProtocol(protocol);
+        builder.setSrcAddress(srcAddress);
+        builder.setDstAddress(dstAddress);
+        builder.setSrcPort(srcPort);
+        builder.setDstPort(dstPort);
+        builder.setStartMplsLabel(startMplsLabel);
+        builder.setEndMplsLabel(endMplsLabel);
+
+        return builder.build();
+    }
+
+    public AclMatch deserialize(Acl.AclMatch serializedAclMatch) {
+        final var dscp = serializedAclMatch.getDscp();
+        final var protocol = serializedAclMatch.getProtocol();
+        final var srcAddress = serializedAclMatch.getSrcAddress();
+        final var dstAddress = serializedAclMatch.getDstAddress();
+        final var srcPort = serializedAclMatch.getSrcPort();
+        final var dstPort = serializedAclMatch.getDstPort();
+        final var startMplsLabel = serializedAclMatch.getStartMplsLabel();
+        final var endMplsLabel = serializedAclMatch.getEndMplsLabel();
+
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    public Acl.AclForwardActionEnum serialize(AclForwardActionEnum aclForwardActionEnum) {
+        switch (aclForwardActionEnum) {
+            case DROP:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP;
+            case ACCEPT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT;
+            case REJECT:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT;
+            case UNDEFINED:
+                return Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED;
+            default:
+                return Acl.AclForwardActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclForwardActionEnum deserialize(Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        switch (serializedAclForwardActionEnum) {
+            case ACLFORWARDINGACTION_DROP:
+                return AclForwardActionEnum.DROP;
+            case ACLFORWARDINGACTION_ACCEPT:
+                return AclForwardActionEnum.ACCEPT;
+            case ACLFORWARDINGACTION_REJECT:
+                return AclForwardActionEnum.REJECT;
+            case UNRECOGNIZED:
+            default:
+                return AclForwardActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclLogActionEnum serialize(AclLogActionEnum aclLogActionEnum) {
+        switch (aclLogActionEnum) {
+            case NO_LOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_NOLOG;
+            case SYSLOG:
+                return Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG;
+            case UNDEFINED:
+                return Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED;
+            default:
+                return Acl.AclLogActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public AclLogActionEnum deserialize(Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        switch (serializedAclLogActionEnum) {
+            case ACLLOGACTION_NOLOG:
+                return AclLogActionEnum.NO_LOG;
+            case ACLLOGACTION_SYSLOG:
+                return AclLogActionEnum.SYSLOG;
+            case UNRECOGNIZED:
+            default:
+                return AclLogActionEnum.UNDEFINED;
+        }
+    }
+
+    public Acl.AclAction serialize(AclAction aclAction) {
+        final var builder = Acl.AclAction.newBuilder();
+
+        final var aclForwardActionEnum = aclAction.getAclForwardActionEnum();
+        final var aclLogActionEnum = aclAction.getAclLogActionEnum();
+
+        final var serializedAclForwardActionEnum = serialize(aclForwardActionEnum);
+        final var serializedAclLogActionEnum = serialize(aclLogActionEnum);
+
+        builder.setForwardAction(serializedAclForwardActionEnum);
+        builder.setLogAction(serializedAclLogActionEnum);
+
+        return builder.build();
+    }
+
+    public AclAction deserialize(Acl.AclAction serializedAclAction) {
+        final var serializedAclForwardActionEnum = serializedAclAction.getForwardAction();
+        final var serializedAclLogActionEnum = serializedAclAction.getLogAction();
+
+        final var aclForwardActionEnum = deserialize(serializedAclForwardActionEnum);
+        final var aclLogActionEnum = deserialize(serializedAclLogActionEnum);
+
+        return new AclAction(aclForwardActionEnum, aclLogActionEnum);
+    }
+
+    public Acl.AclEntry serialize(AclEntry aclEntry) {
+        final var builder = Acl.AclEntry.newBuilder();
+
+        final var sequenceId = aclEntry.getSequenceId();
+        final var description = aclEntry.getDescription();
+        final var aclMatch = aclEntry.getMatch();
+        final var aclAction = aclEntry.getAction();
+
+        final var serializedAclMatch = serialize(aclMatch);
+        final var serializedAclAction = serialize(aclAction);
+
+        builder.setSequenceId(sequenceId);
+        builder.setDescription(description);
+        builder.setMatch(serializedAclMatch);
+        builder.setAction(serializedAclAction);
+
+        return builder.build();
+    }
+
+    public AclEntry deserialize(Acl.AclEntry serializedAclEntry) {
+        final var sequenceId = serializedAclEntry.getSequenceId();
+        final var description = serializedAclEntry.getDescription();
+        final var serializedAclMatch = serializedAclEntry.getMatch();
+        final var serializedAclAction = serializedAclEntry.getAction();
+
+        final var aclMatch = deserialize(serializedAclMatch);
+        final var aclAction = deserialize(serializedAclAction);
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
+    public Acl.AclRuleSet serialize(AclRuleSet aclRuleSet) {
+        final var builder = Acl.AclRuleSet.newBuilder();
+
+        final var name = aclRuleSet.getName();
+        final var type = aclRuleSet.getType();
+        final var description = aclRuleSet.getDescription();
+        final var userId = aclRuleSet.getUserId();
+        final var entries = aclRuleSet.getEntries();
+
+        final var serializedType = serialize(type);
+        final var serializedEntries =
+                entries.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setName(name);
+        builder.setType(serializedType);
+        builder.setDescription(description);
+        builder.setUserId(userId);
+        builder.addAllEntries(serializedEntries);
+
+        return builder.build();
+    }
+
+    public AclRuleSet deserialize(Acl.AclRuleSet serializedAclRuleSet) {
+        final var serializedName = serializedAclRuleSet.getName();
+        final var serializedType = serializedAclRuleSet.getType();
+        final var serializedDescription = serializedAclRuleSet.getDescription();
+        final var serializedUserId = serializedAclRuleSet.getUserId();
+        final var serializedEntries = serializedAclRuleSet.getEntriesList();
+
+        final var type = deserialize(serializedType);
+        final var entries =
+                serializedEntries.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new AclRuleSet(serializedName, type, serializedDescription, serializedUserId, entries);
+    }
+
+    public ConfigRule_ACL serialize(ConfigRuleAcl configRuleAcl) {
+        final var builder = ContextOuterClass.ConfigRule_ACL.newBuilder();
+
+        final var endPointId = configRuleAcl.getEndPointId();
+        final var aclRuleSet = configRuleAcl.getRuleSet();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedAclRuleSet = serialize(aclRuleSet);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setRuleSet(serializedAclRuleSet);
+
+        return builder.build();
+    }
+
+    public ConfigRuleAcl deserialize(ConfigRule_ACL serializedConfigRuleAcl) {
+        final var serializedEndPointId = serializedConfigRuleAcl.getEndpointId();
+        final var serializedAclRuleSet = serializedConfigRuleAcl.getRuleSet();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var aclRuleSet = deserialize(serializedAclRuleSet);
+
+        return new ConfigRuleAcl(endPointId, aclRuleSet);
+    }
+
+    public ConfigRule_Custom serialize(ConfigRuleCustom configRuleCustom) {
+        final var builder = ConfigRule_Custom.newBuilder();
+
+        final var resourceKey = configRuleCustom.getResourceKey();
+        final var resourceValue = configRuleCustom.getResourceValue();
+
+        builder.setResourceKey(resourceKey);
+        builder.setResourceValue(resourceValue);
+
+        return builder.build();
+    }
+
+    public ConfigRuleCustom deserialize(ConfigRule_Custom serializedConfigRuleCustom) {
+        final var serializedResourceKey = serializedConfigRuleCustom.getResourceKey();
+        final var serializedResourceValue = serializedConfigRuleCustom.getResourceValue();
+
+        return new ConfigRuleCustom(serializedResourceKey, serializedResourceValue);
+    }
+
+    public ContextOuterClass.ConfigRule serialize(ConfigRule configRule) {
+        final var builder = ContextOuterClass.ConfigRule.newBuilder();
+
+        final var configActionEnum = configRule.getConfigActionEnum();
+        final var configRuleType = configRule.getConfigRuleType();
+        final var configRuleTypeSpecificType = configRuleType.getConfigRuleType();
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleAcl) {
+            final var endPointId = ((ConfigRuleAcl) configRuleTypeSpecificType).getEndPointId();
+            final var aclRuleSet = ((ConfigRuleAcl) configRuleTypeSpecificType).getRuleSet();
+
+            final var serializedEndPointId = serialize(endPointId);
+            final var serializedAclRuleSet = serialize(aclRuleSet);
+
+            final var serializedConfigRuleAcl =
+                    ConfigRule_ACL.newBuilder()
+                            .setEndpointId(serializedEndPointId)
+                            .setRuleSet(serializedAclRuleSet)
+                            .build();
+
+            builder.setAcl(serializedConfigRuleAcl);
+        }
+
+        if (configRuleTypeSpecificType instanceof ConfigRuleCustom) {
+            final var configRuleCustomResourceKey =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceKey();
+            final var configRuleCustomResourceValue =
+                    ((ConfigRuleCustom) configRuleTypeSpecificType).getResourceValue();
+
+            final var serializedConfigRuleCustom =
+                    ConfigRule_Custom.newBuilder()
+                            .setResourceKey(configRuleCustomResourceKey)
+                            .setResourceValue(configRuleCustomResourceValue)
+                            .build();
+
+            builder.setCustom(serializedConfigRuleCustom);
+        }
+
+        final var serializedConfigActionEnum = serialize(configActionEnum);
+
+        builder.setAction(serializedConfigActionEnum);
+
+        return builder.build();
+    }
+
+    public ConfigRule deserialize(ContextOuterClass.ConfigRule serializedConfigRule) {
+        final var serializedConfigActionEnum = serializedConfigRule.getAction();
+        final var typeOfConfigRule = serializedConfigRule.getConfigRuleCase();
+
+        final var configActionEnum = deserialize(serializedConfigActionEnum);
+
+        switch (typeOfConfigRule) {
+            case ACL:
+                final var serializedConfigRuleAcl = serializedConfigRule.getAcl();
+
+                final var configRuleAcl = deserialize(serializedConfigRuleAcl);
+                final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+                return new ConfigRule(configActionEnum, configRuleTypeAcl);
+            case CUSTOM:
+                final var serializedConfigRuleCustom = serializedConfigRule.getCustom();
+
+                final var configRuleCustom = deserialize(serializedConfigRuleCustom);
+                final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom);
+
+                return new ConfigRule(configActionEnum, configRuleTypeCustom);
+            default:
+            case CONFIGRULE_NOT_SET:
+                throw new IllegalStateException("Config Rule not set");
+        }
+    }
+
+    public ContextOuterClass.Location serialize(Location location) {
+        final var builder = ContextOuterClass.Location.newBuilder();
+
+        final var locationType = location.getLocationType();
+        final var locationTypeSpecificType = locationType.getLocationType();
+
+        if (locationTypeSpecificType instanceof GpsPosition) {
+            final var latitude = ((GpsPosition) locationTypeSpecificType).getLatitude();
+            final var longitude = ((GpsPosition) locationTypeSpecificType).getLongitude();
+
+            final var serializedGpsPosition =
+                    ContextOuterClass.GPS_Position.newBuilder()
+                            .setLatitude(latitude)
+                            .setLongitude(longitude)
+                            .build();
+
+            builder.setGpsPosition(serializedGpsPosition);
+        }
+
+        if (locationTypeSpecificType instanceof String) {
+            final var region = ((String) locationTypeSpecificType);
+
+            builder.setRegion(region);
+        }
+
+        return builder.build();
+    }
+
+    public Location deserialize(ContextOuterClass.Location serializedLocation) {
+        final var typeOfLocation = serializedLocation.getLocationCase();
+
+        switch (typeOfLocation) {
+            case REGION:
+                final var region = serializedLocation.getRegion();
+                final var locationTypeRegion = new LocationTypeRegion(region);
+
+                return new Location(locationTypeRegion);
+            case GPS_POSITION:
+                final var serializedGpsPosition = serializedLocation.getGpsPosition();
+                final var latitude = serializedGpsPosition.getLatitude();
+                final var longitude = serializedGpsPosition.getLongitude();
+
+                final var gpsPosition = new GpsPosition(latitude, longitude);
+                final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+
+                return new Location(locationTypeGpsPosition);
+            default:
+            case LOCATION_NOT_SET:
+                throw new IllegalStateException("Location value not set");
+        }
+    }
+
+    public ContextOuterClass.IsolationLevelEnum serialize(IsolationLevelEnum isolationLevelEnum) {
+        switch (isolationLevelEnum) {
+            case NO_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.NO_ISOLATION;
+            case PHYSICAL_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PHYSICAL_ISOLATION;
+            case LOGICAL_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.LOGICAL_ISOLATION;
+            case PROCESS_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PROCESS_ISOLATION;
+            case PHYSICAL_MEMORY_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION;
+            case PHYSICAL_NETWORK_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION;
+            case VIRTUAL_RESOURCE_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION;
+            case NETWORK_FUNCTIONS_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+            case SERVICE_ISOLATION:
+                return ContextOuterClass.IsolationLevelEnum.SERVICE_ISOLATION;
+            default:
+                return ContextOuterClass.IsolationLevelEnum.UNRECOGNIZED;
+        }
+    }
+
+    public IsolationLevelEnum deserialize(
+            ContextOuterClass.IsolationLevelEnum serializedIsolationLevelEnum) {
+        switch (serializedIsolationLevelEnum) {
+            case PHYSICAL_ISOLATION:
+                return IsolationLevelEnum.PHYSICAL_ISOLATION;
+            case LOGICAL_ISOLATION:
+                return IsolationLevelEnum.LOGICAL_ISOLATION;
+            case PROCESS_ISOLATION:
+                return IsolationLevelEnum.PROCESS_ISOLATION;
+            case PHYSICAL_MEMORY_ISOLATION:
+                return IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION;
+            case PHYSICAL_NETWORK_ISOLATION:
+                return IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION;
+            case VIRTUAL_RESOURCE_ISOLATION:
+                return IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION;
+            case NETWORK_FUNCTIONS_ISOLATION:
+                return IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+            case SERVICE_ISOLATION:
+                return IsolationLevelEnum.SERVICE_ISOLATION;
+            case UNRECOGNIZED:
+            default:
+                return IsolationLevelEnum.NO_ISOLATION;
+        }
+    }
+
+    public ContextOuterClass.Constraint_Custom serialize(ConstraintCustom constraintCustom) {
+        final var builder = ContextOuterClass.Constraint_Custom.newBuilder();
+
+        final var constraintType = constraintCustom.getConstraintType();
+        final var constraintValue = constraintCustom.getConstraintValue();
+
+        builder.setConstraintType(constraintType);
+        builder.setConstraintValue(constraintValue);
+
+        return builder.build();
+    }
+
+    public ConstraintCustom deserialize(
+            ContextOuterClass.Constraint_Custom serializedConstraintCustom) {
+        final var constraintType = serializedConstraintCustom.getConstraintType();
+        final var constraintValue = serializedConstraintCustom.getConstraintValue();
+
+        return new ConstraintCustom(constraintType, constraintValue);
+    }
+
+    public ContextOuterClass.Constraint_Schedule serialize(ConstraintSchedule constraintSchedule) {
+        final var builder = ContextOuterClass.Constraint_Schedule.newBuilder();
+
+        final var startTimestamp = constraintSchedule.getStartTimestamp();
+        final var durationDays = constraintSchedule.getDurationDays();
+
+        builder.setStartTimestamp(startTimestamp);
+        builder.setDurationDays(durationDays);
+
+        return builder.build();
+    }
+
+    public ConstraintSchedule deserialize(
+            ContextOuterClass.Constraint_Schedule serializedConstraintSchedule) {
+        final var startTimestamp = serializedConstraintSchedule.getStartTimestamp();
+        final var durationDays = serializedConstraintSchedule.getDurationDays();
+
+        return new ConstraintSchedule(startTimestamp, durationDays);
+    }
+
+    public ContextOuterClass.Constraint_EndPointLocation serialize(
+            ConstraintEndPointLocation constraintEndPointLocation) {
+        final var builder = ContextOuterClass.Constraint_EndPointLocation.newBuilder();
+
+        final var endPointId = constraintEndPointLocation.getEndPointId();
+        final var location = constraintEndPointLocation.getLocation();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedLocation = serialize(location);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setLocation(serializedLocation);
+
+        return builder.build();
+    }
+
+    public ConstraintEndPointLocation deserialize(
+            ContextOuterClass.Constraint_EndPointLocation serializedConstraintEndPointLocation) {
+        final var serializedEndPointId = serializedConstraintEndPointLocation.getEndpointId();
+        final var serializedLocation = serializedConstraintEndPointLocation.getLocation();
+
+        final var endPointId = deserialize(serializedEndPointId);
+        final var location = deserialize(serializedLocation);
+
+        return new ConstraintEndPointLocation(endPointId, location);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Availability serialize(
+            ConstraintSlaAvailability constraintSlaAvailability) {
+        final var builder = ContextOuterClass.Constraint_SLA_Availability.newBuilder();
+
+        final var numDisjointPaths = constraintSlaAvailability.getNumDisjointPaths();
+        final var isAllActive = constraintSlaAvailability.isAllActive();
+
+        builder.setNumDisjointPaths(numDisjointPaths);
+        builder.setAllActive(isAllActive);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaAvailability deserialize(
+            ContextOuterClass.Constraint_SLA_Availability serializedConstraintSlaAvailability) {
+        final var numDisjointPaths = serializedConstraintSlaAvailability.getNumDisjointPaths();
+        final var isAllActive = serializedConstraintSlaAvailability.getAllActive();
+
+        return new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Capacity serialize(
+            ConstraintSlaCapacity constraintSlaCapacity) {
+        final var builder = ContextOuterClass.Constraint_SLA_Capacity.newBuilder();
+
+        final var capacityGbps = constraintSlaCapacity.getCapacityGbps();
+
+        builder.setCapacityGbps(capacityGbps);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaCapacity deserialize(
+            ContextOuterClass.Constraint_SLA_Capacity serializedConstraintSlaCapacity) {
+        final var capacityGbps = serializedConstraintSlaCapacity.getCapacityGbps();
+
+        return new ConstraintSlaCapacity(capacityGbps);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Isolation_level serialize(
+            ConstraintSlaIsolationLevel constraintSlaIsolationLevel) {
+        final var builder = ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder();
+
+        final var isolationLevelEnum = constraintSlaIsolationLevel.getIsolationLevelEnum();
+
+        final var serializedIsolationLevelEnum = serialize(isolationLevelEnum);
+
+        builder.setIsolationLevel(serializedIsolationLevelEnum);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaIsolationLevel deserialize(
+            ContextOuterClass.Constraint_SLA_Isolation_level serializedConstraintIsolationLevel) {
+        final var serializedIsolationLevelEnum = serializedConstraintIsolationLevel.getIsolationLevel();
+
+        final var isolationLevelEnum = deserialize(serializedIsolationLevelEnum);
+
+        return new ConstraintSlaIsolationLevel(isolationLevelEnum);
+    }
+
+    public ContextOuterClass.Constraint_SLA_Latency serialize(
+            ConstraintSlaLatency constraintSlaLatency) {
+        final var builder = ContextOuterClass.Constraint_SLA_Latency.newBuilder();
+
+        final var e2eLatencyMs = constraintSlaLatency.getE2eLatencyMs();
+
+        builder.setE2ELatencyMs(e2eLatencyMs);
+
+        return builder.build();
+    }
+
+    public ConstraintSlaLatency deserialize(
+            ContextOuterClass.Constraint_SLA_Latency serializedConstraintSlaLatency) {
+        final var e2ELatencyMs = serializedConstraintSlaLatency.getE2ELatencyMs();
+
+        return new ConstraintSlaLatency(e2ELatencyMs);
+    }
+
+    public ContextOuterClass.Constraint serialize(Constraint constraint) {
+        final var builder = ContextOuterClass.Constraint.newBuilder();
+
+        final var constraintType = constraint.getConstraintType();
+        final var constraintTypeSpecificType = constraintType.getConstraintType();
+
+        if (constraintTypeSpecificType instanceof ConstraintCustom) {
+            final var constraintCustomType =
+                    ((ConstraintCustom) constraintTypeSpecificType).getConstraintType();
+            final var constraintCustomValue =
+                    ((ConstraintCustom) constraintTypeSpecificType).getConstraintValue();
+
+            final var serializedConstraintCustom =
+                    ContextOuterClass.Constraint_Custom.newBuilder()
+                            .setConstraintType(constraintCustomType)
+                            .setConstraintValue(constraintCustomValue)
+                            .build();
+
+            builder.setCustom(serializedConstraintCustom);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSchedule) {
+            final var startTimestamp =
+                    ((ConstraintSchedule) constraintTypeSpecificType).getStartTimestamp();
+            final var durationDays = ((ConstraintSchedule) constraintTypeSpecificType).getDurationDays();
+
+            final var serializedConstraintSchedule =
+                    ContextOuterClass.Constraint_Schedule.newBuilder()
+                            .setStartTimestamp(startTimestamp)
+                            .setDurationDays(durationDays)
+                            .build();
+
+            builder.setSchedule(serializedConstraintSchedule);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintEndPointLocation) {
+            final var endPointId =
+                    ((ConstraintEndPointLocation) constraintTypeSpecificType).getEndPointId();
+            final var location = ((ConstraintEndPointLocation) constraintTypeSpecificType).getLocation();
+
+            final var serializedEndPointId = serialize(endPointId);
+            final var serializedLocation = serialize(location);
+
+            final var serializedConstraintEndPointLocation =
+                    ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                            .setEndpointId(serializedEndPointId)
+                            .setLocation(serializedLocation)
+                            .build();
+
+            builder.setEndpointLocation(serializedConstraintEndPointLocation);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaAvailability) {
+            final var numDisJointPaths =
+                    ((ConstraintSlaAvailability) constraintTypeSpecificType).getNumDisjointPaths();
+            final var isAllActive =
+                    ((ConstraintSlaAvailability) constraintTypeSpecificType).isAllActive();
+
+            final var serializedConstraintSlaAvailability =
+                    ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                            .setNumDisjointPaths(numDisJointPaths)
+                            .setAllActive(isAllActive)
+                            .build();
+
+            builder.setSlaAvailability(serializedConstraintSlaAvailability);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaCapacity) {
+            final var capacityGbps =
+                    ((ConstraintSlaCapacity) constraintTypeSpecificType).getCapacityGbps();
+
+            final var serializedConstraintSlaCapacity =
+                    ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                            .setCapacityGbps(capacityGbps)
+                            .build();
+
+            builder.setSlaCapacity(serializedConstraintSlaCapacity);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaIsolationLevel) {
+            final var isolationLevelEnum =
+                    ((ConstraintSlaIsolationLevel) constraintTypeSpecificType).getIsolationLevelEnum();
+
+            final var serializedIsolationLevelEnum = serialize(isolationLevelEnum);
+            final var serializedConstraintSlaIsolationLevel =
+                    ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                            .setIsolationLevel(serializedIsolationLevelEnum)
+                            .build();
+
+            builder.setSlaIsolation(serializedConstraintSlaIsolationLevel);
+        }
+
+        if (constraintTypeSpecificType instanceof ConstraintSlaLatency) {
+            final var e2eLatencyMs =
+                    ((ConstraintSlaLatency) constraintTypeSpecificType).getE2eLatencyMs();
+
+            final var serializedConstraintSlaLatency =
+                    ContextOuterClass.Constraint_SLA_Latency.newBuilder()
+                            .setE2ELatencyMs(e2eLatencyMs)
+                            .build();
+
+            builder.setSlaLatency(serializedConstraintSlaLatency);
+        }
+
+        return builder.build();
+    }
+
+    public Constraint deserialize(ContextOuterClass.Constraint serializedConstraint) {
+        final var typeOfConstraint = serializedConstraint.getConstraintCase();
+
+        switch (typeOfConstraint) {
+            case CUSTOM:
+                final var serializedConstraintCustom = serializedConstraint.getCustom();
+                final var constraintType = serializedConstraintCustom.getConstraintType();
+                final var constraintValue = serializedConstraintCustom.getConstraintValue();
+
+                final var constraintCustom = new ConstraintCustom(constraintType, constraintValue);
+                final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+
+                return new Constraint(constraintTypeCustom);
+            case SCHEDULE:
+                final var serializedConstraintSchedule = serializedConstraint.getSchedule();
+                final var startTimestamp = serializedConstraintSchedule.getStartTimestamp();
+                final var durationDays = serializedConstraintSchedule.getDurationDays();
+
+                final var constraintSchedule = new ConstraintSchedule(startTimestamp, durationDays);
+                final var constraintTypeSchedule = new ConstraintTypeSchedule(constraintSchedule);
+
+                return new Constraint(constraintTypeSchedule);
+            case ENDPOINT_LOCATION:
+                final var serializedConstrainEndPointLocation = serializedConstraint.getEndpointLocation();
+                final var serializedEndPointId = serializedConstrainEndPointLocation.getEndpointId();
+                final var serializedLocation = serializedConstrainEndPointLocation.getLocation();
+
+                final var endPointId = deserialize(serializedEndPointId);
+                final var location = deserialize(serializedLocation);
+                final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location);
+                final var constraintTypeEndPointLocation =
+                        new ConstraintTypeEndPointLocation(constraintEndPointLocation);
+
+                return new Constraint(constraintTypeEndPointLocation);
+            case SLA_CAPACITY:
+                final var serializedConstrainSlaCapacity = serializedConstraint.getSlaCapacity();
+                final var capacityGbps = serializedConstrainSlaCapacity.getCapacityGbps();
+
+                final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+                final var constraintTypeSlaCapacity = new ConstraintTypeSlaCapacity(constraintSlaCapacity);
+
+                return new Constraint(constraintTypeSlaCapacity);
+            case SLA_LATENCY:
+                final var serializedConstrainSlaLatency = serializedConstraint.getSlaLatency();
+                final var e2ELatencyMs = serializedConstrainSlaLatency.getE2ELatencyMs();
+
+                final var constraintSlaLatency = new ConstraintSlaLatency(e2ELatencyMs);
+                final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(constraintSlaLatency);
+
+                return new Constraint(constraintTypeSlaLatency);
+            case SLA_AVAILABILITY:
+                final var serializedConstrainSlaAvailability = serializedConstraint.getSlaAvailability();
+                final var numDisjointPaths = serializedConstrainSlaAvailability.getNumDisjointPaths();
+                final var isAllActive = serializedConstrainSlaAvailability.getAllActive();
+
+                final var constraintSlaAvailability =
+                        new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+                final var constraintTypeSlaAvailability =
+                        new ConstraintTypeSlaAvailability(constraintSlaAvailability);
+
+                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 constraintTypeSlaIsolation =
+                        new ConstraintTypeSlaIsolationLevel(constraintSlaIsolation);
+
+                return new Constraint(constraintTypeSlaIsolation);
+
+            default:
+            case CONSTRAINT_NOT_SET:
+                throw new IllegalStateException("Constraint value not set");
+        }
+    }
+
+    public ContextOuterClass.EndPointId serialize(EndPointId endPointId) {
+        final var builder = ContextOuterClass.EndPointId.newBuilder();
+
+        final var endPointIdTopologyId = endPointId.getTopologyId();
+        final var endPointIdDeviceId = endPointId.getDeviceId();
+        final var endPointIdId = endPointId.getId();
+
+        final var serializedTopologyId = serialize(endPointIdTopologyId);
+        final var serializedDeviceId = serializeDeviceId(endPointIdDeviceId);
+        final var serializedEndPointIdId = serializeUuid(endPointIdId);
+
+        builder.setTopologyId(serializedTopologyId);
+        builder.setDeviceId(serializedDeviceId);
+        builder.setEndpointUuid(serializedEndPointIdId);
+
+        return builder.build();
+    }
+
+    public EndPointId deserialize(ContextOuterClass.EndPointId serializedEndPointId) {
+        final var serializedTopologyId = serializedEndPointId.getTopologyId();
+        final var serializedDeviceId = serializedEndPointId.getDeviceId();
+        final var serializedId = serializedEndPointId.getEndpointUuid();
+
+        final var topologyId = deserialize(serializedTopologyId);
+        final var deviceId = deserialize(serializedDeviceId);
+        final var id = deserialize(serializedId);
+
+        return new EndPointId(topologyId, deviceId, id);
+    }
+
+    public ContextOuterClass.EventTypeEnum serialize(EventTypeEnum eventTypeEnum) {
+        switch (eventTypeEnum) {
+            case CREATE:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE;
+            case REMOVE:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE;
+            case UPDATE:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_UPDATE;
+            case UNDEFINED:
+                return ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED;
+            default:
+                return ContextOuterClass.EventTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public EventTypeEnum deserialize(ContextOuterClass.EventTypeEnum serializedEventType) {
+        switch (serializedEventType) {
+            case EVENTTYPE_CREATE:
+                return EventTypeEnum.CREATE;
+            case EVENTTYPE_REMOVE:
+                return EventTypeEnum.REMOVE;
+            case EVENTTYPE_UPDATE:
+                return EventTypeEnum.UPDATE;
+            case EVENTTYPE_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return EventTypeEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.Timestamp serialize(double timestamp) {
+        final var builder = ContextOuterClass.Timestamp.newBuilder();
+
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public double deserialize(ContextOuterClass.Timestamp serializedTimeStamp) {
+
+        return serializedTimeStamp.getTimestamp();
+    }
+
+    public ContextOuterClass.Event serialize(Event event) {
+        final var builder = ContextOuterClass.Event.newBuilder();
+
+        final var eventType = serialize(event.getEventTypeEnum());
+        final var timestamp = serialize(event.getTimestamp());
+        builder.setEventType(eventType);
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public Event deserialize(ContextOuterClass.Event serializedEvent) {
+        final var timestamp = deserialize(serializedEvent.getTimestamp());
+        final var eventType = deserialize(serializedEvent.getEventType());
+
+        return new Event(timestamp, eventType);
+    }
+
+    public ContextOuterClass.ServiceId serialize(ServiceId serviceId) {
+        final var builder = ContextOuterClass.ServiceId.newBuilder();
+
+        final var contextId = serviceId.getContextId();
+        final var id = serviceId.getId();
+
+        final var serializedContextId = serializeContextId(contextId);
+        final var serializedId = serializeUuid(id);
+
+        builder.setContextId(serializedContextId);
+        builder.setServiceUuid(serializedId);
+
+        return builder.build();
+    }
+
+    public ServiceId deserialize(ContextOuterClass.ServiceId serializedServiceId) {
+        final var serializedContextId = serializedServiceId.getContextId();
+        final var serializedId = serializedServiceId.getServiceUuid();
+
+        final var contextId = deserialize(serializedContextId);
+        final var id = deserialize(serializedId);
+
+        return new ServiceId(contextId, id);
+    }
+
+    public ContextOuterClass.SliceId serialize(SliceId sliceId) {
+        final var builder = ContextOuterClass.SliceId.newBuilder();
+
+        final var contextId = sliceId.getContextId();
+        final var id = sliceId.getId();
+
+        final var serializedContextId = serializeContextId(contextId);
+        final var serializedId = serializeUuid(id);
+
+        builder.setContextId(serializedContextId);
+        builder.setSliceUuid(serializedId);
+
+        return builder.build();
+    }
+
+    public SliceId deserialize(ContextOuterClass.SliceId serializedSliceId) {
+        final var serializedContextId = serializedSliceId.getContextId();
+        final var serializedId = serializedSliceId.getSliceUuid();
+
+        final var contextId = deserialize(serializedContextId);
+        final var id = deserialize(serializedId);
+
+        return new SliceId(contextId, id);
+    }
+
+    public ContextOuterClass.ServiceStatusEnum serialize(ServiceStatusEnum serviceStatusEnum) {
+        switch (serviceStatusEnum) {
+            case ACTIVE:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_ACTIVE;
+            case PLANNED:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PLANNED;
+            case PENDING_REMOVAL:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL;
+            case UNDEFINED:
+                return ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED;
+            default:
+                return ContextOuterClass.ServiceStatusEnum.UNRECOGNIZED;
+        }
+    }
+
+    public ServiceStatusEnum deserialize(
+            ContextOuterClass.ServiceStatusEnum serializedServiceStatusEnum) {
+        switch (serializedServiceStatusEnum) {
+            case SERVICESTATUS_ACTIVE:
+                return ServiceStatusEnum.ACTIVE;
+            case SERVICESTATUS_PLANNED:
+                return ServiceStatusEnum.PLANNED;
+            case SERVICESTATUS_PENDING_REMOVAL:
+                return ServiceStatusEnum.PENDING_REMOVAL;
+            case SERVICESTATUS_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return ServiceStatusEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.ServiceTypeEnum serialize(ServiceTypeEnum serviceTypeEnum) {
+        switch (serviceTypeEnum) {
+            case L2NM:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L2NM;
+            case L3NM:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L3NM;
+            case TAPI_CONNECTIVITY_SERVICE:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE;
+            case UNKNOWN:
+                return ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN;
+            default:
+                return ContextOuterClass.ServiceTypeEnum.UNRECOGNIZED;
+        }
+    }
+
+    public ServiceTypeEnum deserialize(ContextOuterClass.ServiceTypeEnum serializedServiceTypeEnum) {
+        switch (serializedServiceTypeEnum) {
+            case SERVICETYPE_L2NM:
+                return ServiceTypeEnum.L2NM;
+            case SERVICETYPE_L3NM:
+                return ServiceTypeEnum.L3NM;
+            case SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+                return ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE;
+            case SERVICETYPE_UNKNOWN:
+            case UNRECOGNIZED:
+            default:
+                return ServiceTypeEnum.UNKNOWN;
+        }
+    }
+
+    public ContextOuterClass.ServiceStatus serialize(ServiceStatus serviceStatus) {
+        final var builder = ContextOuterClass.ServiceStatus.newBuilder();
+
+        final var serviceStatusEnum = serviceStatus.getServiceStatus();
+        final var serializedServiceStatusEnum = serialize(serviceStatusEnum);
+
+        builder.setServiceStatus(serializedServiceStatusEnum);
+
+        return builder.build();
+    }
+
+    public ServiceStatus deserialize(ContextOuterClass.ServiceStatus serializedServiceStatus) {
+        final var serializedServiceStatusEnum = serializedServiceStatus.getServiceStatus();
+        final var serviceStatusEnum = deserialize(serializedServiceStatusEnum);
+
+        return new ServiceStatus(serviceStatusEnum);
+    }
+
+    public ContextOuterClass.ServiceConfig serialize(ServiceConfig serviceConfig) {
+        final var builder = ContextOuterClass.ServiceConfig.newBuilder();
+
+        final var serializedConfigRules =
+                serviceConfig.getConfigRules().stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.addAllConfigRules(serializedConfigRules);
+
+        return builder.build();
+    }
+
+    public ServiceConfig deserialize(ContextOuterClass.ServiceConfig serviceConfig) {
+        final var configRules =
+                serviceConfig.getConfigRulesList().stream()
+                        .map(this::deserialize)
+                        .collect(Collectors.toList());
+
+        return new ServiceConfig(configRules);
+    }
+
+    public ContextOuterClass.Service serialize(Service service) {
+        final var builder = ContextOuterClass.Service.newBuilder();
+
+        final var serviceId = service.getServiceId();
+        final var serviceType = service.getServiceType();
+        final var serviceEndPointIds = service.getServiceEndPointIds();
+        final var serviceConstraints = service.getServiceConstraints();
+        final var serviceStatus = service.getServiceStatus();
+        final var serviceConfig = service.getServiceConfig();
+        final var serviceTimestamp = service.getTimestamp();
+
+        final var serializedServiceId = serialize(serviceId);
+        final var serializedServiceType = serialize(serviceType);
+        final var serializedServiceEndPointIds =
+                serviceEndPointIds.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedServiceConstraints =
+                serviceConstraints.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedServiceStatus = serialize(serviceStatus);
+        final var serializedServiceConfig = serialize(serviceConfig);
+        final var serializedTimestamp = serialize(serviceTimestamp);
+
+        builder.setServiceId(serializedServiceId);
+        builder.setServiceType(serializedServiceType);
+        builder.addAllServiceEndpointIds(serializedServiceEndPointIds);
+        builder.addAllServiceConstraints(serializedServiceConstraints);
+        builder.setServiceStatus(serializedServiceStatus);
+        builder.setServiceConfig(serializedServiceConfig);
+        builder.setTimestamp(serializedTimestamp);
+
+        return builder.build();
+    }
+
+    public Service deserialize(ContextOuterClass.Service serializedService) {
+
+        final var serializedServiceId = serializedService.getServiceId();
+        final var serializedServiceType = serializedService.getServiceType();
+        final var serializedServiceEndPointIds = serializedService.getServiceEndpointIdsList();
+        final var serializedServiceConstraints = serializedService.getServiceConstraintsList();
+        final var serializedServiceStatus = serializedService.getServiceStatus();
+        final var serializedServiceConfig = serializedService.getServiceConfig();
+        final var serializedTimestamp = serializedService.getTimestamp();
+
+        final var serviceId = deserialize(serializedServiceId);
+        final var serviceType = deserialize(serializedServiceType);
+        final var serviceEndPointIds =
+                serializedServiceEndPointIds.stream().map(this::deserialize).collect(Collectors.toList());
+        final var serviceConstraints =
+                serializedServiceConstraints.stream().map(this::deserialize).collect(Collectors.toList());
+        final var serviceStatus = deserialize(serializedServiceStatus);
+        final var serviceConfig = deserialize(serializedServiceConfig);
+        final var timestamp = deserialize(serializedTimestamp);
+
+        return new Service(
+                serviceId,
+                serviceType,
+                serviceEndPointIds,
+                serviceConstraints,
+                serviceStatus,
+                serviceConfig,
+                timestamp);
+    }
+
+    public KpiSampleTypes.KpiSampleType serialize(KpiSampleType kpiSampleType) {
+        switch (kpiSampleType) {
+            case PACKETS_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED;
+            case PACKETS_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED;
+            case BYTES_TRANSMITTED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED;
+            case BYTES_RECEIVED:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED;
+            case UNKNOWN:
+                return KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN;
+            default:
+                return KpiSampleTypes.KpiSampleType.UNRECOGNIZED;
+        }
+    }
+
+    public KpiSampleType deserialize(KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        switch (serializedKpiSampleType) {
+            case KPISAMPLETYPE_PACKETS_TRANSMITTED:
+                return KpiSampleType.PACKETS_TRANSMITTED;
+            case KPISAMPLETYPE_PACKETS_RECEIVED:
+                return KpiSampleType.PACKETS_RECEIVED;
+            case KPISAMPLETYPE_BYTES_TRANSMITTED:
+                return KpiSampleType.BYTES_TRANSMITTED;
+            case KPISAMPLETYPE_BYTES_RECEIVED:
+                return KpiSampleType.BYTES_RECEIVED;
+            case KPISAMPLETYPE_UNKNOWN:
+            default:
+                return KpiSampleType.UNKNOWN;
+        }
+    }
+
+    public Policy.RuleState serialize(RuleState rulestate) {
+        switch (rulestate) {
+            case POLICY_FAILED:
+                return Policy.RuleState.POLICY_FAILED;
+            case POLICY_INSERTED:
+                return Policy.RuleState.POLICY_INSERTED;
+            case POLICY_VALIDATED:
+                return Policy.RuleState.POLICY_VALIDATED;
+            case POLICY_PROVISIONED:
+                return Policy.RuleState.POLICY_PROVISIONED;
+            case POLICY_ACTIVE:
+                return Policy.RuleState.POLICY_ACTIVE;
+            case POLICY_ENFORCED:
+                return Policy.RuleState.POLICY_ENFORCED;
+            case POLICY_INEFFECTIVE:
+                return Policy.RuleState.POLICY_INEFFECTIVE;
+            case POLICY_EFFECTIVE:
+                return Policy.RuleState.POLICY_EFFECTIVE;
+            case POLICY_UPDATED:
+                return Policy.RuleState.POLICY_UPDATED;
+            case POLICY_REMOVED:
+                return Policy.RuleState.POLICY_REMOVED;
+            case POLICY_UNDEFINED:
+                return Policy.RuleState.POLICY_UNDEFINED;
+            default:
+                return Policy.RuleState.UNRECOGNIZED;
+        }
+    }
+
+    public RuleState deserialize(Policy.RuleState serializedRuleState) {
+        switch (serializedRuleState) {
+            case POLICY_INSERTED:
+                return RuleState.POLICY_INSERTED;
+            case POLICY_VALIDATED:
+                return RuleState.POLICY_VALIDATED;
+            case POLICY_PROVISIONED:
+                return RuleState.POLICY_PROVISIONED;
+            case POLICY_ACTIVE:
+                return RuleState.POLICY_ACTIVE;
+            case POLICY_ENFORCED:
+                return RuleState.POLICY_ENFORCED;
+            case POLICY_INEFFECTIVE:
+                return RuleState.POLICY_INEFFECTIVE;
+            case POLICY_EFFECTIVE:
+                return RuleState.POLICY_EFFECTIVE;
+            case POLICY_UPDATED:
+                return RuleState.POLICY_UPDATED;
+            case POLICY_REMOVED:
+                return RuleState.POLICY_REMOVED;
+            case POLICY_FAILED:
+                return RuleState.POLICY_FAILED;
+            case POLICY_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return RuleState.POLICY_UNDEFINED;
+        }
+    }
+
+    public Policy.PolicyRuleState serialize(PolicyRuleState policyRuleState) {
+        final var builder = Policy.PolicyRuleState.newBuilder();
+
+        final var ruleState = policyRuleState.getRuleState();
+
+        final var serializedRuleState = serialize(ruleState);
+
+        builder.setPolicyRuleState(serializedRuleState);
+
+        return builder.build();
+    }
+
+    public PolicyRuleState deserialize(Policy.PolicyRuleState serializedPolicyRuleState) {
+        final var serializedRuleState = serializedPolicyRuleState.getPolicyRuleState();
+
+        final var ruleState = deserialize(serializedRuleState);
+
+        return new PolicyRuleState(ruleState);
+    }
+
+    public PolicyCondition.NumericalOperator serialize(NumericalOperator numericalOperator) {
+        switch (numericalOperator) {
+            case POLICY_RULE_CONDITION_NUMERICAL_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN;
+            case POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN;
+            case POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL;
+            case POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED:
+                return PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED;
+            default:
+                return PolicyCondition.NumericalOperator.UNRECOGNIZED;
+        }
+    }
+
+    public NumericalOperator deserialize(
+            PolicyCondition.NumericalOperator serializedNumericalOperator) {
+        switch (serializedNumericalOperator) {
+            case POLICYRULE_CONDITION_NUMERICAL_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_NOT_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_NOT_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_LESS_THAN:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN;
+            case POLICYRULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_LESS_THAN_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN;
+            case POLICYRULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN_EQUAL;
+            case POLICYRULE_CONDITION_NUMERICAL_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED;
+        }
+    }
+
+    public Monitoring.KpiValue serializeStringKpiValue(KpiValue<String> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setStringVal(kpiValue.getValue()).build();
+    }
+
+    public String deserializeStringKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getStringVal();
+    }
+
+    public Monitoring.KpiValue serializeBooleanKpiValue(KpiValue<Boolean> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setBoolVal(kpiValue.getValue()).build();
+    }
+
+    public boolean deserializeBooleanKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getBoolVal();
+    }
+
+    public Monitoring.KpiValue serializeFloatKpiValue(KpiValue<Float> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setFloatVal(kpiValue.getValue()).build();
+    }
+
+    public float deserializeFloatKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getFloatVal();
+    }
+
+    public Monitoring.KpiValue serializeIntegerKpiValue(KpiValue<Integer> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        return builder.setIntVal(kpiValue.getValue()).build();
+    }
+
+    public int deserializeIntegerKpiValue(Monitoring.KpiValue serializedKpiValue) {
+
+        return serializedKpiValue.getIntVal();
+    }
+
+    public Monitoring.KpiValue serialize(KpiValue<?> kpiValue) {
+        final var builder = Monitoring.KpiValue.newBuilder();
+
+        if (kpiValue.getValue() instanceof Integer) {
+            final var serializedIntegerKpiValue = serializeIntegerKpiValue((KpiValue<Integer>) kpiValue);
+            builder.setIntVal(serializedIntegerKpiValue.getIntVal());
+        }
+        if (kpiValue.getValue() instanceof Float) {
+            final var serializedFloatKpiValue = serializeFloatKpiValue((KpiValue<Float>) kpiValue);
+            builder.setFloatVal(serializedFloatKpiValue.getFloatVal());
+        }
+        if (kpiValue.getValue() instanceof String) {
+            final var serializedStringKpiValue = serializeStringKpiValue((KpiValue<String>) kpiValue);
+            builder.setStringVal(serializedStringKpiValue.getStringVal());
+        }
+        if (kpiValue.getValue() instanceof Boolean) {
+            final var serializedBooleanKpiValue = serializeBooleanKpiValue((KpiValue<Boolean>) kpiValue);
+            builder.setBoolVal(serializedBooleanKpiValue.getBoolVal());
+        }
+
+        return builder.build();
+    }
+
+    public KpiValue deserialize(Monitoring.KpiValue serializedKpiValue) {
+
+        final var typeOfKpiValue = serializedKpiValue.getValueCase();
+
+        switch (typeOfKpiValue) {
+            case INTVAL:
+                final var intValue = deserializeIntegerKpiValue(serializedKpiValue);
+                return new IntegerKpiValue(intValue);
+            case BOOLVAL:
+                final var booleanValue = deserializeBooleanKpiValue(serializedKpiValue);
+                return new BooleanKpiValue(booleanValue);
+            case FLOATVAL:
+                final var floatValue = deserializeFloatKpiValue(serializedKpiValue);
+                return new FloatKpiValue(floatValue);
+            case STRINGVAL:
+                final var stringValue = deserializeStringKpiValue(serializedKpiValue);
+                return new StringKpiValue(stringValue);
+            default:
+            case VALUE_NOT_SET:
+                throw new IllegalStateException("Kpi value not set");
+        }
+    }
+
+    public Monitoring.KpiValueRange serialize(KpiValueRange kpiValueRange) {
+        final var builder = Monitoring.KpiValueRange.newBuilder();
+
+        final var kpiValueMin = kpiValueRange.getKpiMinValue();
+        final var kpiValueMax = kpiValueRange.getKpiMaxValue();
+
+        final var serializedKpiValueMin = serialize(kpiValueMin);
+        final var serializedKpiValueMax = serialize(kpiValueMax);
+
+        builder.setKpiMinValue(serializedKpiValueMin);
+        builder.setKpiMaxValue(serializedKpiValueMax);
+
+        return builder.build();
+    }
+
+    public KpiValueRange deserialize(Monitoring.KpiValueRange serializedKpiValueRange) {
+        final var serializedMinKpiValue = serializedKpiValueRange.getKpiMinValue();
+        final var serializedMaxKpiValue = serializedKpiValueRange.getKpiMaxValue();
+
+        final var minKpiValue = deserialize(serializedMinKpiValue);
+        final var maxKpiValue = deserialize(serializedMaxKpiValue);
+
+        return new KpiValueRange(minKpiValue, maxKpiValue);
+    }
+
+    public Monitoring.AlarmDescriptor serialize(AlarmDescriptor alarmDescriptor) {
+        final var builder = Monitoring.AlarmDescriptor.newBuilder();
+
+        final var alarmDescription = alarmDescriptor.getAlarmDescription();
+        final var name = alarmDescriptor.getName();
+        final var kpiId = alarmDescriptor.getKpiId();
+        final var kpiValueRange = alarmDescriptor.getKpiValueRange();
+        final var timestamp = alarmDescriptor.getTimestamp();
+
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serialize(kpiValueRange);
+
+        builder.setAlarmDescription(alarmDescription);
+        builder.setName(name);
+        builder.setKpiId(serializedKpiId);
+        builder.setKpiValueRange(serializedKpiValueRange);
+        builder.setTimestamp(timestamp);
+
+        return builder.build();
+    }
+
+    public AlarmDescriptor deserialize(Monitoring.AlarmDescriptor serializedAlarmDescriptor) {
+
+        final var alarmDescription = serializedAlarmDescriptor.getAlarmDescription();
+        final var name = serializedAlarmDescriptor.getName();
+        final var serializedKpiId = serializedAlarmDescriptor.getKpiId();
+        final var serializedKpiValueRange = serializedAlarmDescriptor.getKpiValueRange();
+        final var timestamp = serializedAlarmDescriptor.getTimestamp();
+
+        final var kpiId = deserialize(serializedKpiId);
+        final var kpiValueRange = deserialize(serializedKpiValueRange);
+
+        return new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
+    }
+
+    public Monitoring.AlarmResponse serialize(AlarmResponse alarmResponse) {
+        final var builder = Monitoring.AlarmResponse.newBuilder();
+
+        final var alarmId = alarmResponse.getAlarmId();
+        final var text = alarmResponse.getText();
+        final var kpiValue = alarmResponse.getKpiValue();
+
+        final var serializedAlarmIdUuid = serializeUuid(alarmId);
+        final var serializedAlarmId =
+                Monitoring.AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build();
+        final var serializedKpiValue = serialize(kpiValue);
+
+        builder.setAlarmId(serializedAlarmId);
+        builder.setText(text);
+        builder.setKpiValue(serializedKpiValue);
+
+        return builder.build();
+    }
+
+    public AlarmResponse deserialize(Monitoring.AlarmResponse serializedAlarmResponse) {
+        final var serializedAlarmId = serializedAlarmResponse.getAlarmId().getAlarmId();
+        final var text = serializedAlarmResponse.getText();
+        final var serializedKpiValue = serializedAlarmResponse.getKpiValue();
+
+        final var alarmId = deserialize(serializedAlarmId);
+        final var kpiValue = deserialize(serializedKpiValue);
+
+        return new AlarmResponse(alarmId, text, kpiValue);
+    }
+
+    public Monitoring.SubsDescriptor serialize(SubsDescriptor subDescriptor) {
+        final var builder = Monitoring.SubsDescriptor.newBuilder();
+
+        final var kpiId = subDescriptor.getKpiId();
+        final var samplingDurationS = subDescriptor.getSamplingDurationS();
+        final var samplingIntervalS = subDescriptor.getSamplingIntervalS();
+        final var startDate = subDescriptor.getStartDate();
+        final var endDate = subDescriptor.getEndDate();
+
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        builder.setKpiId(serializedKpiId);
+        builder.setSamplingDurationS(samplingDurationS);
+        builder.setSamplingIntervalS(samplingIntervalS);
+        builder.setStartDate(startDate);
+        builder.setEndDate(endDate);
+
+        return builder.build();
+    }
+
+    public SubsDescriptor deserialize(Monitoring.SubsDescriptor serializedSubDescriptor) {
+        final var serializedKpiId = serializedSubDescriptor.getKpiId();
+        final var samplingDurationS = serializedSubDescriptor.getSamplingDurationS();
+        final var samplingIntervalS = serializedSubDescriptor.getSamplingIntervalS();
+        final var startDate = serializedSubDescriptor.getStartDate();
+        final var endDate = serializedSubDescriptor.getEndDate();
+
+        final var kpiId = deserialize(serializedKpiId);
+
+        return new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+    }
+
+    public PolicyCondition.PolicyRuleCondition serialize(PolicyRuleCondition policyRuleCondition) {
+        final var builder = PolicyCondition.PolicyRuleCondition.newBuilder();
+
+        final var policyRuleConditionKpiId = policyRuleCondition.getKpiId();
+        final var numericalOperator = policyRuleCondition.getNumericalOperator();
+        final var policyRuleConditionKpiValue = policyRuleCondition.getKpiValue();
+
+        final var serializedKpiIdUuid = serializeUuid(policyRuleConditionKpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedNumericalOperator = serialize(numericalOperator);
+        final var serializedPolicyRuleConditionKpiValue = serialize(policyRuleConditionKpiValue);
+
+        builder.setKpiId(serializedKpiId);
+        builder.setNumericalOperator(serializedNumericalOperator);
+        builder.setKpiValue(serializedPolicyRuleConditionKpiValue);
+
+        return builder.build();
+    }
+
+    public PolicyRuleCondition deserialize(
+            PolicyCondition.PolicyRuleCondition serializedPolicyRuleCondition) {
+
+        final var serializedPolicyRuleConditionKpiId =
+                serializedPolicyRuleCondition.getKpiId().getKpiId();
+        final var serializedNumericalOperator = serializedPolicyRuleCondition.getNumericalOperator();
+        final var serializedPolicyRuleConditionKpiValue = serializedPolicyRuleCondition.getKpiValue();
+
+        final var policyRuleConditionKpiId = deserialize(serializedPolicyRuleConditionKpiId);
+        final var numericalOperator = deserialize(serializedNumericalOperator);
+        final var policyRuleConditionKpiValue = deserialize(serializedPolicyRuleConditionKpiValue);
+
+        return new PolicyRuleCondition(
+                policyRuleConditionKpiId, numericalOperator, policyRuleConditionKpiValue);
+    }
+
+    public PolicyAction.PolicyRuleActionEnum serialize(PolicyRuleActionEnum policyRuleActionEnum) {
+        switch (policyRuleActionEnum) {
+            case POLICY_RULE_ACTION_SET_DEVICE_STATUS:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_SET_DEVICE_STATUS;
+            case POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE;
+            case POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT;
+            case POLICY_RULE_ACTION_NO_ACTION:
+                return PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION;
+            default:
+                return PolicyAction.PolicyRuleActionEnum.UNRECOGNIZED;
+        }
+    }
+
+    public PolicyRuleActionEnum deserialize(
+            PolicyAction.PolicyRuleActionEnum serializePolicyRuleActionEnum) {
+        switch (serializePolicyRuleActionEnum) {
+            case POLICYRULE_ACTION_SET_DEVICE_STATUS:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS;
+            case POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE;
+            case POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT;
+            case POLICYRULE_ACTION_NO_ACTION:
+            case UNRECOGNIZED:
+            default:
+                return PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION;
+        }
+    }
+
+    public PolicyAction.PolicyRuleAction serialize(PolicyRuleAction policyRuleAction) {
+        final var builder = PolicyAction.PolicyRuleAction.newBuilder();
+
+        final var policyRuleActionEnum = policyRuleAction.getPolicyRuleActionEnum();
+        final var policyRuleActionParameters = policyRuleAction.getPolicyRuleActionParameters();
+
+        final var serializedPolicyRuleActionEnum = serialize(policyRuleActionEnum);
+
+        builder.setAction(serializedPolicyRuleActionEnum);
+        builder.addAllParameters(policyRuleActionParameters);
+
+        return builder.build();
+    }
+
+    public PolicyRuleAction deserialize(PolicyAction.PolicyRuleAction serializedPolicyRuleAction) {
+        final var serializedPolicyRuleActionEnum = serializedPolicyRuleAction.getAction();
+        final var policyRuleActionParameters = serializedPolicyRuleAction.getParametersList();
+
+        final var policyRuleActionEnum = deserialize(serializedPolicyRuleActionEnum);
+
+        return new PolicyRuleAction(policyRuleActionEnum, policyRuleActionParameters);
+    }
+
+    public PolicyCondition.BooleanOperator serialize(BooleanOperator booleanOperator) {
+        switch (booleanOperator) {
+            case POLICYRULE_CONDITION_BOOLEAN_AND:
+                return PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND;
+            case POLICYRULE_CONDITION_BOOLEAN_OR:
+                return PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR;
+            case POLICYRULE_CONDITION_BOOLEAN_UNDEFINED:
+                return PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+            default:
+                return PolicyCondition.BooleanOperator.UNRECOGNIZED;
+        }
+    }
+
+    public BooleanOperator deserialize(PolicyCondition.BooleanOperator serializedBooleanOperator) {
+        switch (serializedBooleanOperator) {
+            case POLICYRULE_CONDITION_BOOLEAN_OR:
+                return BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR;
+            case POLICYRULE_CONDITION_BOOLEAN_AND:
+                return BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND;
+            case POLICYRULE_CONDITION_BOOLEAN_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED;
+        }
+    }
+
+    public Policy.PolicyRuleBasic serialize(PolicyRuleBasic policyRuleBasic) {
+        final var builder = Policy.PolicyRuleBasic.newBuilder();
+
+        final var policyRuleId = policyRuleBasic.getPolicyRuleId();
+        final var policyRuleState = policyRuleBasic.getPolicyRuleState();
+        final var priority = policyRuleBasic.getPriority();
+        final var policyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
+        final var booleanOperator = policyRuleBasic.getBooleanOperator();
+        final var policyRuleActions = policyRuleBasic.getPolicyRuleActions();
+
+        final var serializedPolicyRuleId = serializePolicyRuleId(policyRuleId);
+        final var serializedPolicyRuleState = serialize(policyRuleState);
+        final var serializedPolicyRuleConditions =
+                policyRuleConditions.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedBooleanOperator = serialize(booleanOperator);
+        final var serializedPolicyRuleActions =
+                policyRuleActions.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setPolicyRuleId(serializedPolicyRuleId);
+        builder.setPolicyRuleState(serializedPolicyRuleState);
+        builder.setPriority(priority);
+        builder.addAllConditionList(serializedPolicyRuleConditions);
+        builder.setBooleanOperator(serializedBooleanOperator);
+        builder.addAllActionList(serializedPolicyRuleActions);
+
+        return builder.build();
+    }
+
+    public PolicyRuleBasic deserialize(Policy.PolicyRuleBasic serializedPolicyRuleBasic) {
+        final var serializedPolicyRuleId = serializedPolicyRuleBasic.getPolicyRuleId();
+        final var serializedPolicyRuleState = serializedPolicyRuleBasic.getPolicyRuleState();
+        final var priority = serializedPolicyRuleBasic.getPriority();
+        final var serializedPolicyRuleConditions = serializedPolicyRuleBasic.getConditionListList();
+        final var serializedBooleanOperator = serializedPolicyRuleBasic.getBooleanOperator();
+        final var serializedPolicyRuleActions = serializedPolicyRuleBasic.getActionListList();
+
+        final var policyRuleId = deserialize(serializedPolicyRuleId);
+        final var policyRuleState = deserialize(serializedPolicyRuleState);
+        final var policyRuleConditions =
+                serializedPolicyRuleConditions.stream().map(this::deserialize).collect(Collectors.toList());
+        final var booleanOperator = deserialize(serializedBooleanOperator);
+        final var policyRuleActions =
+                serializedPolicyRuleActions.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new PolicyRuleBasic(
+                policyRuleId,
+                policyRuleState,
+                priority,
+                policyRuleConditions,
+                booleanOperator,
+                policyRuleActions);
+    }
+
+    public Policy.PolicyRuleService serialize(PolicyRuleService policyRuleService) {
+        final var builder = Policy.PolicyRuleService.newBuilder();
+
+        final var policyRuleBasic = policyRuleService.getPolicyRuleBasic();
+        final var policyRuleServiceId = policyRuleService.getServiceId();
+        final var policyRuleDeviceIds = policyRuleService.getDeviceIds();
+
+        final var serializedPolicyRuleBasic = serialize(policyRuleBasic);
+        final var serializedPolicyRuleServiceId = serialize(policyRuleServiceId);
+        final var serializedPolicyRuleDeviceIds =
+                policyRuleDeviceIds.stream().map(this::serializeDeviceId).collect(Collectors.toList());
+
+        builder.setPolicyRuleBasic(serializedPolicyRuleBasic);
+        builder.setServiceId(serializedPolicyRuleServiceId);
+        builder.addAllDeviceList(serializedPolicyRuleDeviceIds);
+
+        return builder.build();
+    }
+
+    public PolicyRuleService deserialize(Policy.PolicyRuleService serializedPolicyRuleService) {
+        final var serializedPolicyRuleBasic = serializedPolicyRuleService.getPolicyRuleBasic();
+        final var serializedPolicyRuleServiceId = serializedPolicyRuleService.getServiceId();
+        final var serializedPolicyRuleDeviceIds = serializedPolicyRuleService.getDeviceListList();
+
+        final var policyRuleBasic = deserialize(serializedPolicyRuleBasic);
+        final var policyRuleServiceId = deserialize(serializedPolicyRuleServiceId);
+        final var policyRuleDeviceIds =
+                serializedPolicyRuleDeviceIds.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new PolicyRuleService(policyRuleBasic, policyRuleServiceId, policyRuleDeviceIds);
+    }
+
+    public Policy.PolicyRuleDevice serialize(PolicyRuleDevice policyRuleDevice) {
+        final var builder = Policy.PolicyRuleDevice.newBuilder();
+
+        final var policyRuleBasic = policyRuleDevice.getPolicyRuleBasic();
+        final var policyRuleDeviceIds = policyRuleDevice.getDeviceIds();
+
+        final var serializedPolicyRuleBasic = serialize(policyRuleBasic);
+        final var serializedPolicyRuleDeviceIds =
+                policyRuleDeviceIds.stream().map(this::serializeDeviceId).collect(Collectors.toList());
+
+        builder.setPolicyRuleBasic(serializedPolicyRuleBasic);
+        builder.addAllDeviceList(serializedPolicyRuleDeviceIds);
+
+        return builder.build();
+    }
+
+    public PolicyRuleDevice deserialize(Policy.PolicyRuleDevice serializedPolicyRuleDevice) {
+        final var serializedPolicyRuleBasic = serializedPolicyRuleDevice.getPolicyRuleBasic();
+        final var serializedPolicyRuleDeviceIds = serializedPolicyRuleDevice.getDeviceListList();
+
+        final var policyRuleBasic = deserialize(serializedPolicyRuleBasic);
+        final var policyRuleDeviceIds =
+                serializedPolicyRuleDeviceIds.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new PolicyRuleDevice(policyRuleBasic, policyRuleDeviceIds);
+    }
+
+    public KpiId serializeKpiId(String kpiId) {
+        final var builder = Monitoring.KpiId.newBuilder();
+
+        final var serializedKpiIdUuid = serializeUuid(kpiId);
+        builder.setKpiId(serializedKpiIdUuid);
+
+        return builder.build();
+    }
+
+    public String deserialize(KpiId serializedKpiId) {
+        final var serializedKpiIdUuid = serializedKpiId.getKpiId();
+
+        return deserialize(serializedKpiIdUuid);
+    }
+
+    public Monitoring.Kpi serialize(Kpi kpi) {
+        final var builder = Monitoring.Kpi.newBuilder();
+
+        final var kpiId = kpi.getKpiId();
+        final var timestamp = kpi.getTimestamp();
+        final var kpiValue = kpi.getKpiValue();
+
+        final var serializedKpiId = serializeKpiId(kpiId);
+        final var serializedKpiValue = serialize(kpiValue);
+
+        builder.setKpiId(serializedKpiId);
+        builder.setTimestamp(timestamp);
+        builder.setKpiValue(serializedKpiValue);
+
+        return builder.build();
+    }
+
+    public Kpi deserialize(Monitoring.Kpi serializedKpi) {
+
+        final var serializedKpiId = serializedKpi.getKpiId();
+        final var timestamp = serializedKpi.getTimestamp();
+        final var serializedKpiValue = serializedKpi.getKpiValue();
+
+        final var kpiId = deserialize(serializedKpiId);
+        final var kpiValue = deserialize(serializedKpiValue);
+
+        return new Kpi(kpiId, timestamp, kpiValue);
+    }
+
+    public Monitoring.KpiDescriptor serialize(KpiDescriptor kpiDescriptor) {
+        final var builder = Monitoring.KpiDescriptor.newBuilder();
+
+        final var kpiDescriptorDescription = kpiDescriptor.getKpiDescription();
+        final var kpiDescriptorKpiSampleType = kpiDescriptor.getKpiSampleType();
+        final var kpiDescriptorDeviceId = kpiDescriptor.getDeviceId();
+        final var kpiDescriptorEndPointId = kpiDescriptor.getEndPointId();
+        final var kpiDescriptorServiceId = kpiDescriptor.getServiceId();
+        final var kpiDescriptorSliceId = kpiDescriptor.getSliceId();
+
+        final var serializedKpiDescriptorKpiSampleType = serialize(kpiDescriptorKpiSampleType);
+        final var serializedKpiDescriptorDeviceId = serializeDeviceId(kpiDescriptorDeviceId);
+        final var serializedKpiDescriptorEndPointId = serialize(kpiDescriptorEndPointId);
+        final var serializedKpiDescriptorServiceId = serialize(kpiDescriptorServiceId);
+        final var serializedKpiDescriptorSliceId = serialize(kpiDescriptorSliceId);
+
+        builder.setKpiDescription(kpiDescriptorDescription);
+        builder.setKpiSampleType(serializedKpiDescriptorKpiSampleType);
+        builder.setDeviceId(serializedKpiDescriptorDeviceId);
+        builder.setEndpointId(serializedKpiDescriptorEndPointId);
+        builder.setServiceId(serializedKpiDescriptorServiceId);
+        builder.setSliceId(serializedKpiDescriptorSliceId);
+
+        return builder.build();
+    }
+
+    public KpiDescriptor deserialize(Monitoring.KpiDescriptor serializedKpiDescriptor) {
+
+        final var serializedKpiDescriptorDescription = serializedKpiDescriptor.getKpiDescription();
+        final var serializedKpiDescriptorKpiSampleType = serializedKpiDescriptor.getKpiSampleType();
+        final var serializedKpiDescriptorDeviceId = serializedKpiDescriptor.getDeviceId();
+        final var serializedKpiDescriptorEndPointId = serializedKpiDescriptor.getEndpointId();
+        final var serializedKpiDescriptorServiceId = serializedKpiDescriptor.getServiceId();
+        final var serializedKpiDescriptorSLiceId = serializedKpiDescriptor.getSliceId();
+
+        final var kpiSampleType = deserialize(serializedKpiDescriptorKpiSampleType);
+        final var deviceId = deserialize(serializedKpiDescriptorDeviceId);
+        final var endPointId = deserialize(serializedKpiDescriptorEndPointId);
+        final var serviceId = deserialize(serializedKpiDescriptorServiceId);
+        final var sliceId = deserialize(serializedKpiDescriptorSLiceId);
+
+        return new KpiDescriptor(
+                serializedKpiDescriptorDescription,
+                kpiSampleType,
+                deviceId,
+                endPointId,
+                serviceId,
+                sliceId);
+    }
+
+    public ContextOuterClass.DeviceConfig serialize(DeviceConfig deviceConfig) {
+        final var builder = ContextOuterClass.DeviceConfig.newBuilder();
+
+        final var serializedConfigRules =
+                deviceConfig.getConfigRules().stream().map(this::serialize).collect(Collectors.toList());
+        builder.addAllConfigRules(serializedConfigRules);
+
+        return builder.build();
+    }
+
+    public DeviceConfig deserialize(ContextOuterClass.DeviceConfig deviceConfig) {
+        final var configRules =
+                deviceConfig.getConfigRulesList().stream()
+                        .map(this::deserialize)
+                        .collect(Collectors.toList());
+
+        return new DeviceConfig(configRules);
+    }
+
+    public ContextOuterClass.DeviceOperationalStatusEnum serialize(DeviceOperationalStatus opStatus) {
+        switch (opStatus) {
+            case ENABLED:
+                return DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED;
+            case DISABLED:
+                return DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED;
+            case UNDEFINED:
+            default:
+                return DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED;
+        }
+    }
+
+    public DeviceOperationalStatus deserialize(
+            ContextOuterClass.DeviceOperationalStatusEnum opStatus) {
+        switch (opStatus) {
+            case DEVICEOPERATIONALSTATUS_ENABLED:
+                return DeviceOperationalStatus.ENABLED;
+            case DEVICEOPERATIONALSTATUS_DISABLED:
+                return DeviceOperationalStatus.DISABLED;
+            case DEVICEOPERATIONALSTATUS_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceOperationalStatus.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.DeviceDriverEnum serialize(DeviceDriverEnum deviceDriverEnum) {
+        switch (deviceDriverEnum) {
+            case OPENCONFIG:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG;
+            case TRANSPORT_API:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API;
+            case P4:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4;
+            case IETF_NETWORK_TOPOLOGY:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
+            case ONF_TR_352:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352;
+            case UNDEFINED:
+            default:
+                return ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED;
+        }
+    }
+
+    public DeviceDriverEnum deserialize(
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        switch (serializedDeviceDriverEnum) {
+            case DEVICEDRIVER_OPENCONFIG:
+                return DeviceDriverEnum.OPENCONFIG;
+            case DEVICEDRIVER_TRANSPORT_API:
+                return DeviceDriverEnum.TRANSPORT_API;
+            case DEVICEDRIVER_P4:
+                return DeviceDriverEnum.P4;
+            case DEVICEDRIVER_IETF_NETWORK_TOPOLOGY:
+                return DeviceDriverEnum.IETF_NETWORK_TOPOLOGY;
+            case DEVICEDRIVER_ONF_TR_352:
+                return DeviceDriverEnum.ONF_TR_352;
+            case DEVICEDRIVER_UNDEFINED:
+            case UNRECOGNIZED:
+            default:
+                return DeviceDriverEnum.UNDEFINED;
+        }
+    }
+
+    public ContextOuterClass.EndPoint serialize(EndPoint endPoint) {
+        final var builder = ContextOuterClass.EndPoint.newBuilder();
+
+        final var endPointId = endPoint.getEndPointId();
+        final var endPointType = endPoint.getEndPointType();
+        final var kpiSampleTypes = endPoint.getKpiSampleTypes();
+        final var endPointLocation = endPoint.getEndPointLocation();
+
+        final var serializedEndPointId = serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedEndPointLocation = serialize(endPointLocation);
+
+        builder.setEndpointId(serializedEndPointId);
+        builder.setEndpointType(endPointType);
+        builder.addAllKpiSampleTypes(serializedKpiSampleTypes);
+        builder.setEndpointLocation(serializedEndPointLocation);
+
+        return builder.build();
+    }
+
+    public EndPoint deserialize(ContextOuterClass.EndPoint serializedEndPoint) {
+        final var serializedEndPointId = serializedEndPoint.getEndpointId();
+        final var endPointType = serializedEndPoint.getEndpointType();
+        final var serializedKpiSampleTypes = serializedEndPoint.getKpiSampleTypesList();
+        final var serializedEndPointLocation = serializedEndPoint.getEndpointLocation();
+
+        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);
+    }
+
+    public ContextOuterClass.Device serialize(Device device) {
+        final var builder = ContextOuterClass.Device.newBuilder();
+
+        final var deviceIdUuid = serializeUuid(device.getDeviceId());
+        final var deviceId = DeviceId.newBuilder().setDeviceUuid(deviceIdUuid);
+        final var deviceType = device.getDeviceType();
+        final var deviceConfig = device.getDeviceConfig();
+        final var deviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var deviceDrivers = device.getDeviceDrivers();
+        final var deviceEndPoints = device.getEndPoints();
+
+        final var serializedDeviceConfig = serialize(deviceConfig);
+        final var serializedDeviceOperationalStatus = serialize(deviceOperationalStatus);
+        final var serializedDeviceDrivers =
+                deviceDrivers.stream().map(this::serialize).collect(Collectors.toList());
+        final var serializedDeviceEndPoints =
+                deviceEndPoints.stream().map(this::serialize).collect(Collectors.toList());
+
+        builder.setDeviceId(deviceId);
+        builder.setDeviceType(deviceType);
+        builder.setDeviceConfig(serializedDeviceConfig);
+        builder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        builder.addAllDeviceDrivers(serializedDeviceDrivers);
+        builder.addAllDeviceEndpoints(serializedDeviceEndPoints);
+
+        return builder.build();
+    }
+
+    public Device deserialize(ContextOuterClass.Device device) {
+
+        final var serializedDeviceId = device.getDeviceId();
+        final var deviceType = device.getDeviceType();
+        final var serializedDeviceConfig = device.getDeviceConfig();
+        final var serializedDeviceOperationalStatus = device.getDeviceOperationalStatus();
+        final var serializedDeviceDrivers = device.getDeviceDriversList();
+        final var serializedDeviceEndPoints = device.getDeviceEndpointsList();
+
+        final var deviceId = deserialize(serializedDeviceId);
+        final var deviceConfig = deserialize(serializedDeviceConfig);
+        final var deviceOperationalStatus = deserialize(serializedDeviceOperationalStatus);
+        final var deviceDrivers =
+                serializedDeviceDrivers.stream().map(this::deserialize).collect(Collectors.toList());
+        final var deviceEndPoints =
+                serializedDeviceEndPoints.stream().map(this::deserialize).collect(Collectors.toList());
+
+        return new Device(
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus,
+                deviceDrivers,
+                deviceEndPoints);
+    }
+
+    public Uuid serializeUuid(String uuid) {
+        return Uuid.newBuilder().setUuid(uuid).build();
+    }
+
+    public String deserialize(Uuid uuid) {
+        return uuid.getUuid();
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclAction.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclAction.java
new file mode 100644
index 0000000000000000000000000000000000000000..66771968ceb5525558bebfd95c3e13af24b4d2dd
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclAction.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.policy.acl;
+
+public class AclAction {
+
+    private final AclForwardActionEnum aclForwardActionEnum;
+    private final AclLogActionEnum aclLogActionEnum;
+
+    public AclAction(AclForwardActionEnum aclForwardActionEnum, AclLogActionEnum aclLogActionEnum) {
+        this.aclForwardActionEnum = aclForwardActionEnum;
+        this.aclLogActionEnum = aclLogActionEnum;
+    }
+
+    public AclForwardActionEnum getAclForwardActionEnum() {
+        return aclForwardActionEnum;
+    }
+
+    public AclLogActionEnum getAclLogActionEnum() {
+        return aclLogActionEnum;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{aclForwardActionEnum:\"%s\", aclLogActionEnum:\"%s\"}",
+                getClass().getSimpleName(), aclForwardActionEnum.toString(), aclLogActionEnum.toString());
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclEntry.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclEntry.java
new file mode 100644
index 0000000000000000000000000000000000000000..a85aff9e6c28b1a63e28d62de22e01e354b47ce3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclEntry.java
@@ -0,0 +1,55 @@
+/*
+* 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.acl;
+
+public class AclEntry {
+
+    private final int sequenceId;
+    private final String description;
+    private final AclMatch match;
+    private final AclAction action;
+
+    public AclEntry(int sequenceId, String description, AclMatch match, AclAction action) {
+        this.sequenceId = sequenceId;
+        this.description = description;
+        this.match = match;
+        this.action = action;
+    }
+
+    public int getSequenceId() {
+        return sequenceId;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public AclMatch getMatch() {
+        return match;
+    }
+
+    public AclAction getAction() {
+        return action;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{sequenceId:\"%d\", description:\"%s\", %s, %s}",
+                getClass().getSimpleName(), sequenceId, description, match, action);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclForwardActionEnum.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclForwardActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..be2a896b48a77543232bdd41685d9d0ed8290711
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclForwardActionEnum.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.policy.acl;
+
+public enum AclForwardActionEnum {
+    UNDEFINED,
+    DROP,
+    ACCEPT,
+    REJECT,
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclLogActionEnum.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclLogActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..e0ff362e7154307f934ed0afbfcfa77adcd49acb
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclLogActionEnum.java
@@ -0,0 +1,23 @@
+/*
+* 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.acl;
+
+public enum AclLogActionEnum {
+    UNDEFINED,
+    NO_LOG,
+    SYSLOG
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclMatch.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclMatch.java
new file mode 100644
index 0000000000000000000000000000000000000000..89528a58dde8d39c6bc777fe9220dce85c855a65
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclMatch.java
@@ -0,0 +1,95 @@
+/*
+* 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.acl;
+
+public class AclMatch {
+
+    private final int dscp;
+    private final int protocol;
+    private final String srcAddress;
+    private final String dstAddress;
+    private final int srcPort;
+    private final int dstPort;
+    private final int startMplsLabel;
+    private final int endMplsLabel;
+
+    public AclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        this.dscp = dscp;
+        this.protocol = protocol;
+        this.srcAddress = srcAddress;
+        this.dstAddress = dstAddress;
+        this.srcPort = srcPort;
+        this.dstPort = dstPort;
+        this.startMplsLabel = startMplsLabel;
+        this.endMplsLabel = endMplsLabel;
+    }
+
+    public int getDscp() {
+        return dscp;
+    }
+
+    public int getProtocol() {
+        return protocol;
+    }
+
+    public String getSrcAddress() {
+        return srcAddress;
+    }
+
+    public String getDstAddress() {
+        return dstAddress;
+    }
+
+    public int getSrcPort() {
+        return srcPort;
+    }
+
+    public int getDstPort() {
+        return dstPort;
+    }
+
+    public int getStartMplsLabel() {
+        return startMplsLabel;
+    }
+
+    public int getEndMplsLabel() {
+        return endMplsLabel;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{dscp:\"%d\", protocol:\"%d\", srcAddress:\"%s\", dstAddress:\"%s\", srcPort:\"%d\", dstPort:\"%d\", startMplsLabel:\"%d\", endMplsLabel:\"%d\"}",
+                getClass().getSimpleName(),
+                dscp,
+                protocol,
+                srcAddress,
+                dstAddress,
+                srcPort,
+                dstPort,
+                startMplsLabel,
+                endMplsLabel);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleSet.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleSet.java
new file mode 100644
index 0000000000000000000000000000000000000000..4eec8e7a31fb8bad151f6ad9f7704a8246d78d1e
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleSet.java
@@ -0,0 +1,74 @@
+/*
+* 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.acl;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
+
+public class AclRuleSet {
+
+    private final String name;
+    private final AclRuleTypeEnum type;
+    private final String description;
+    private final String userId;
+    private final List<AclEntry> entries;
+
+    public AclRuleSet(
+            String name,
+            AclRuleTypeEnum type,
+            String description,
+            String userId,
+            List<AclEntry> entries) {
+        this.name = name;
+        this.type = type;
+        this.description = description;
+        this.userId = userId;
+        this.entries = entries;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public AclRuleTypeEnum getType() {
+        return type;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public String getUserId() {
+        return userId;
+    }
+
+    public List<AclEntry> getEntries() {
+        return entries;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{name:\"%s\", type:\"%s\", description:\"%s\", userId:\"%s\", [%s]}",
+                getClass().getSimpleName(),
+                name,
+                type.toString(),
+                description,
+                userId,
+                Util.toString(entries));
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleTypeEnum.java b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleTypeEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..0dc11277140d5d092cbc3d4dd0b23f21ce855e65
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/acl/AclRuleTypeEnum.java
@@ -0,0 +1,26 @@
+/*
+* 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.acl;
+
+public enum AclRuleTypeEnum {
+    UNDEFINED,
+    IPV4,
+    IPV6,
+    L2,
+    MPLS,
+    MIXED
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f1c2446aeeec7e2dc62d8732187255df8c477a1
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGateway.java
@@ -0,0 +1,38 @@
+/*
+* 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.context;
+
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.smallrye.mutiny.Uni;
+
+public interface ContextGateway {
+
+    // Context related methods
+    Uni<Service> getService(ServiceId serviceId);
+
+    Uni<ServiceId> setService(Service service);
+
+    Uni<Device> getDevice(String deviceId);
+
+    // Context-policy related methods
+    Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId);
+
+    Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3af300d4914ef589d380c32a3389383c5dd37c0d
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextGatewayImpl.java
@@ -0,0 +1,99 @@
+/*
+* 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.context;
+
+import context.MutinyContextServiceGrpc.MutinyContextServiceStub;
+import context_policy.MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub;
+import eu.teraflow.policy.Serializer;
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.quarkus.grpc.GrpcClient;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class ContextGatewayImpl implements ContextGateway {
+
+    @GrpcClient("context")
+    MutinyContextServiceStub streamingDelegateContext;
+
+    // TODO remove client when RPCs declared in context-policy.proto are moved in context.proto
+    //  and use streamingDelegateContext for all methods
+    @GrpcClient("context_policy")
+    MutinyContextPolicyServiceStub streamingDelegateContextPolicy;
+
+    private final Serializer serializer;
+
+    @Inject
+    public ContextGatewayImpl(Serializer serializer) {
+        this.serializer = serializer;
+    }
+
+    @Override
+    public Uni<Service> getService(ServiceId serviceId) {
+
+        final var serializedServiceId = serializer.serialize(serviceId);
+
+        return streamingDelegateContext
+                .getService(serializedServiceId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<ServiceId> setService(Service service) {
+        final var serializedService = serializer.serialize(service);
+
+        return streamingDelegateContext
+                .setService(serializedService)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<Device> getDevice(String deviceId) {
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceId);
+
+        return streamingDelegateContext
+                .getDevice(serializedDeviceId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId) {
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId);
+
+        return streamingDelegateContextPolicy
+                .getPolicyRule(serializedPolicyRuleId)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+
+    @Override
+    public Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic) {
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+
+        return streamingDelegateContextPolicy
+                .setPolicyRule(serializedPolicyRuleBasic)
+                .onItem()
+                .transform(serializer::deserialize);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
index 4d2b317cb3e76b043f919fa7112147a6bda8697e..133318a05bad7f8a2fd4b7d2ae423e1375d34287 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextService.java
@@ -16,4 +16,21 @@
 
 package eu.teraflow.policy.context;
 
-public interface ContextService {}
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.smallrye.mutiny.Uni;
+
+public interface ContextService {
+
+    Uni<Service> getService(ServiceId serviceId);
+
+    Uni<ServiceId> setService(Service service);
+
+    Uni<Device> getDevice(String deviceId);
+
+    Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId);
+
+    Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic);
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..bb5c8d61bd5f73375b531f43bcfb744dc5bf2c20
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/ContextServiceImpl.java
@@ -0,0 +1,61 @@
+/*
+* 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.context;
+
+import eu.teraflow.policy.context.model.Device;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.model.PolicyRuleBasic;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class ContextServiceImpl implements ContextService {
+
+    private final ContextGateway contextGateway;
+
+    @Inject
+    public ContextServiceImpl(ContextGateway contextGateway) {
+        this.contextGateway = contextGateway;
+    }
+
+    @Override
+    public Uni<Service> getService(ServiceId serviceId) {
+        return contextGateway.getService(serviceId);
+    }
+
+    @Override
+    public Uni<ServiceId> setService(Service service) {
+        return contextGateway.setService(service);
+    }
+
+    @Override
+    public Uni<Device> getDevice(String deviceId) {
+        return contextGateway.getDevice(deviceId);
+    }
+
+    @Override
+    public Uni<PolicyRuleBasic> getPolicyRule(String policyRuleId) {
+        return contextGateway.getPolicyRule(policyRuleId);
+    }
+
+    @Override
+    public Uni<String> setPolicyRule(PolicyRuleBasic policyRuleBasic) {
+        return contextGateway.setPolicyRule(policyRuleBasic);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java
index 906acf1a3ff121584321551de6baf260f0bb7cf3..38b2aa29bba6e43c736f0d9abd9b3243c5470d56 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRule.java
@@ -18,32 +18,26 @@ package eu.teraflow.policy.context.model;
 
 public class ConfigRule {
 
-    private final ConfigActionEnum action;
-    private final String resourceKey;
-    private final String resourceValue;
+    private final ConfigActionEnum configActionEnum;
+    private final ConfigRuleType<?> configRuleType;
 
-    public ConfigRule(ConfigActionEnum action, String resourceKey, String resourceValue) {
-        this.action = action;
-        this.resourceKey = resourceKey;
-        this.resourceValue = resourceValue;
+    public ConfigRule(ConfigActionEnum configActionEnum, ConfigRuleType<?> configRuleType) {
+        this.configActionEnum = configActionEnum;
+        this.configRuleType = configRuleType;
     }
 
-    public ConfigActionEnum getAction() {
-        return action;
+    public ConfigActionEnum getConfigActionEnum() {
+        return configActionEnum;
     }
 
-    public String getResourceKey() {
-        return resourceKey;
-    }
-
-    public String getResourceValue() {
-        return resourceValue;
+    public ConfigRuleType getConfigRuleType() {
+        return configRuleType;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{action:\"%s\", resourceKey:\"%s\", resourceValue:\"%s\"}",
-                getClass().getSimpleName(), action.toString(), resourceKey, resourceValue);
+                "%s:{configActionEnum:\"%s\", %s}",
+                getClass().getSimpleName(), configActionEnum.toString(), configRuleType);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleAcl.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab05331c76f7daa178bd748cfb62dd1b7c3e915a
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleAcl.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.policy.context.model;
+
+import eu.teraflow.policy.acl.AclRuleSet;
+
+public class ConfigRuleAcl {
+
+    private final EndPointId endPointId;
+    private final AclRuleSet ruleSet;
+
+    public ConfigRuleAcl(EndPointId endPointId, AclRuleSet ruleSet) {
+        this.endPointId = endPointId;
+        this.ruleSet = ruleSet;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public AclRuleSet getRuleSet() {
+        return ruleSet;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), endPointId, ruleSet);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleCustom.java
similarity index 68%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java
rename to src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleCustom.java
index d307463d135a95ba65939f6b550bd0f2d9de9dac..0046286179c4c20425bd028ede2465d2604d534f 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleCustom.java
@@ -14,24 +14,18 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.policy.context.model;
 
-public class ConfigRule {
+public class ConfigRuleCustom {
 
-    private final ConfigActionEnum configActionEnum;
     private final String resourceKey;
     private final String resourceValue;
 
-    public ConfigRule(ConfigActionEnum configActionEnum, String resourceKey, String resourceValue) {
-        this.configActionEnum = configActionEnum;
+    public ConfigRuleCustom(String resourceKey, String resourceValue) {
         this.resourceKey = resourceKey;
         this.resourceValue = resourceValue;
     }
 
-    public ConfigActionEnum getConfigActionEnum() {
-        return configActionEnum;
-    }
-
     public String getResourceKey() {
         return resourceKey;
     }
@@ -43,6 +37,7 @@ public class ConfigRule {
     @Override
     public String toString() {
         return String.format(
-                "%s<%s, %s,%s>", getClass().getSimpleName(), configActionEnum, resourceKey, resourceValue);
+                "%s:{resourceKey:\"%s\", resourceValue:\"%s\"}",
+                getClass().getSimpleName(), resourceKey, resourceValue);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleType.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..6b7daa12893fc75fdb797ec5e20e2300850ec146
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleType.java
@@ -0,0 +1,22 @@
+/*
+* 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.context.model;
+
+public interface ConfigRuleType<T> {
+
+    public T getConfigRuleType();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeAcl.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeAcl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3a93cc7f33f1e60f9d36b6fae333556339298207
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeAcl.java
@@ -0,0 +1,36 @@
+/*
+* 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.context.model;
+
+public class ConfigRuleTypeAcl implements ConfigRuleType<ConfigRuleAcl> {
+
+    private final ConfigRuleAcl configRuleAcl;
+
+    public ConfigRuleTypeAcl(ConfigRuleAcl configRuleAcl) {
+        this.configRuleAcl = configRuleAcl;
+    }
+
+    @Override
+    public ConfigRuleAcl getConfigRuleType() {
+        return this.configRuleAcl;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), configRuleAcl);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeCustom.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..c98df91c4027f9ea0089261504ffeeda23d56aea
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConfigRuleTypeCustom.java
@@ -0,0 +1,36 @@
+/*
+* 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.context.model;
+
+public class ConfigRuleTypeCustom implements ConfigRuleType<ConfigRuleCustom> {
+
+    private final ConfigRuleCustom configRuleCustom;
+
+    public ConfigRuleTypeCustom(ConfigRuleCustom configRuleCustom) {
+        this.configRuleCustom = configRuleCustom;
+    }
+
+    @Override
+    public ConfigRuleCustom getConfigRuleType() {
+        return this.configRuleCustom;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), configRuleCustom);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java
index edc5c0df7b789f97475d934bacb87b47792d2b01..a7097bc0bfe9ac72e1dd74ed272559ad8bc3e231 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Constraint.java
@@ -18,26 +18,18 @@ package eu.teraflow.policy.context.model;
 
 public class Constraint {
 
-    private final String constraintType;
-    private final String constraintValue;
+    private final ConstraintType<?> constraintType;
 
-    public Constraint(String constraintType, String constraintValue) {
+    public Constraint(ConstraintType<?> constraintType) {
         this.constraintType = constraintType;
-        this.constraintValue = constraintValue;
     }
 
-    public String getConstraintType() {
+    public ConstraintType getConstraintType() {
         return constraintType;
     }
 
-    public String getConstraintValue() {
-        return constraintValue;
-    }
-
     @Override
     public String toString() {
-        return String.format(
-                "%s:{constraintType:\"%s\", constraintValue:\"%s\"}",
-                getClass().getSimpleName(), constraintType, constraintValue);
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintType);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintCustom.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..3fe3443cca7315613784781040d4be7a988daa54
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintCustom.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.policy.context.model;
+
+public class ConstraintCustom {
+
+    private final String constraintType;
+    private final String constraintValue;
+
+    public ConstraintCustom(String constraintType, String constraintValue) {
+        this.constraintType = constraintType;
+        this.constraintValue = constraintValue;
+    }
+
+    public String getConstraintType() {
+        return constraintType;
+    }
+
+    public String getConstraintValue() {
+        return constraintValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{constraintType:\"%s\", constraintValue:\"%s\"}",
+                getClass().getSimpleName(), constraintType, constraintValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintEndPointLocation.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintEndPointLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..12e6ec41c3095529f9807b5449309d966814e3c1
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintEndPointLocation.java
@@ -0,0 +1,41 @@
+/*
+* 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.context.model;
+
+public class ConstraintEndPointLocation {
+
+    private final EndPointId endPointId;
+    private final Location location;
+
+    public ConstraintEndPointLocation(EndPointId endPointId, Location location) {
+        this.endPointId = endPointId;
+        this.location = location;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public Location getLocation() {
+        return location;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), endPointId, location);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSchedule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSchedule.java
new file mode 100644
index 0000000000000000000000000000000000000000..b374c022cf85c27f191e3d2607ed13b8078241ba
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSchedule.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.policy.context.model;
+
+public class ConstraintSchedule {
+
+    private final float startTimestamp;
+    private final float durationDays;
+
+    public ConstraintSchedule(float startTimestamp, float durationDays) {
+        this.startTimestamp = startTimestamp;
+        this.durationDays = durationDays;
+    }
+
+    public float getStartTimestamp() {
+        return startTimestamp;
+    }
+
+    public float getDurationDays() {
+        return durationDays;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{startTimestamp:\"%f\", durationDays:\"%f\"}",
+                getClass().getSimpleName(), startTimestamp, durationDays);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaAvailability.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaAvailability.java
new file mode 100644
index 0000000000000000000000000000000000000000..c8a69f3120eb183f5d0b34c73d9653afe1bd7ce3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaAvailability.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.policy.context.model;
+
+public class ConstraintSlaAvailability {
+
+    private final int numDisjointPaths;
+    private final boolean allActive;
+
+    public ConstraintSlaAvailability(int numDisjointPaths, boolean allActive) {
+        this.numDisjointPaths = numDisjointPaths;
+        this.allActive = allActive;
+    }
+
+    public int getNumDisjointPaths() {
+        return numDisjointPaths;
+    }
+
+    public boolean isAllActive() {
+        return allActive;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{numDisjointPaths:%d, allActive:%b}",
+                getClass().getSimpleName(), numDisjointPaths, allActive);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaCapacity.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaCapacity.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d3f9a25b6dd7eae7dd27a846549b325b72b6cd2
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaCapacity.java
@@ -0,0 +1,35 @@
+/*
+* 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.context.model;
+
+public class ConstraintSlaCapacity {
+
+    private final float capacityGbps;
+
+    public ConstraintSlaCapacity(float capacityGbps) {
+        this.capacityGbps = capacityGbps;
+    }
+
+    public float getCapacityGbps() {
+        return capacityGbps;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{capacityGbps:\"%f\"}", getClass().getSimpleName(), capacityGbps);
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..adb55bff458c49c9189cd10b19d905dd865758d7
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaIsolationLevel.java
@@ -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.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintSlaIsolationLevel {
+
+    private final IsolationLevelEnum isolationLevelEnum;
+
+    public ConstraintSlaIsolationLevel(IsolationLevelEnum isolationLevelEnum) {
+        this.isolationLevelEnum = isolationLevelEnum;
+    }
+
+    public IsolationLevelEnum getIsolationLevelEnum() {
+        return isolationLevelEnum;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{isolationLevelEnum:\"%s\"}",
+                getClass().getSimpleName(), isolationLevelEnum.toString());
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaLatency.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaLatency.java
new file mode 100644
index 0000000000000000000000000000000000000000..0f0c8fe20816394b450bdcd092206b3d7c257b89
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintSlaLatency.java
@@ -0,0 +1,35 @@
+/*
+* 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.context.model;
+
+public class ConstraintSlaLatency {
+
+    private final float e2eLatencyMs;
+
+    public ConstraintSlaLatency(float e2eLatencyMs) {
+        this.e2eLatencyMs = e2eLatencyMs;
+    }
+
+    public float getE2eLatencyMs() {
+        return e2eLatencyMs;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{e2eLatencyMs:\"%f\"}", getClass().getSimpleName(), e2eLatencyMs);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintType.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintType.java
new file mode 100644
index 0000000000000000000000000000000000000000..e582859e6858a531e3a2c918deaed4d12d8618e4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintType.java
@@ -0,0 +1,22 @@
+/*
+* 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.context.model;
+
+public interface ConstraintType<T> {
+
+    public T getConstraintType();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeCustom.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..94d0052a9ee4faef3c65856f59c5d1b7e8448b99
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeCustom.java
@@ -0,0 +1,36 @@
+/*
+* 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.context.model;
+
+public class ConstraintTypeCustom implements ConstraintType<ConstraintCustom> {
+
+    private final ConstraintCustom constraintCustom;
+
+    public ConstraintTypeCustom(ConstraintCustom constraintCustom) {
+        this.constraintCustom = constraintCustom;
+    }
+
+    @Override
+    public ConstraintCustom getConstraintType() {
+        return this.constraintCustom;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintCustom);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeEndPointLocation.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeEndPointLocation.java
new file mode 100644
index 0000000000000000000000000000000000000000..197bea58a6c9471a0ff1d50815cbb5ca75db9392
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeEndPointLocation.java
@@ -0,0 +1,35 @@
+/*
+* 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.context.model;
+
+public class ConstraintTypeEndPointLocation implements ConstraintType<ConstraintEndPointLocation> {
+    private final ConstraintEndPointLocation constraintEndPointLocation;
+
+    public ConstraintTypeEndPointLocation(ConstraintEndPointLocation constraintEndPointLocation) {
+        this.constraintEndPointLocation = constraintEndPointLocation;
+    }
+
+    @Override
+    public ConstraintEndPointLocation getConstraintType() {
+        return this.constraintEndPointLocation;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintEndPointLocation);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSchedule.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSchedule.java
new file mode 100644
index 0000000000000000000000000000000000000000..20169427ac81d5d631cf92faf33b13f06947468c
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSchedule.java
@@ -0,0 +1,35 @@
+/*
+* 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.context.model;
+
+public class ConstraintTypeSchedule implements ConstraintType<ConstraintSchedule> {
+    private final ConstraintSchedule constraintSchedule;
+
+    public ConstraintTypeSchedule(ConstraintSchedule constraintSchedule) {
+        this.constraintSchedule = constraintSchedule;
+    }
+
+    @Override
+    public ConstraintSchedule getConstraintType() {
+        return this.constraintSchedule;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSchedule);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaAvailability.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaAvailability.java
new file mode 100644
index 0000000000000000000000000000000000000000..10a60e8dce42a3031cac0a666ee1f4decc9814c8
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaAvailability.java
@@ -0,0 +1,36 @@
+/*
+* 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.context.model;
+
+public class ConstraintTypeSlaAvailability implements ConstraintType<ConstraintSlaAvailability> {
+
+    private final ConstraintSlaAvailability constraintSlaAvailability;
+
+    public ConstraintTypeSlaAvailability(ConstraintSlaAvailability constraintSlaAvailability) {
+        this.constraintSlaAvailability = constraintSlaAvailability;
+    }
+
+    @Override
+    public ConstraintSlaAvailability getConstraintType() {
+        return this.constraintSlaAvailability;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaAvailability);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaCapacity.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaCapacity.java
new file mode 100644
index 0000000000000000000000000000000000000000..c43cc5948c31317226cd3233b5c63ab7716222ed
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaCapacity.java
@@ -0,0 +1,36 @@
+/*
+* 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.context.model;
+
+public class ConstraintTypeSlaCapacity implements ConstraintType<ConstraintSlaCapacity> {
+
+    private final ConstraintSlaCapacity constraintSlaCapacity;
+
+    public ConstraintTypeSlaCapacity(ConstraintSlaCapacity constraintSlaCapacity) {
+        this.constraintSlaCapacity = constraintSlaCapacity;
+    }
+
+    @Override
+    public ConstraintSlaCapacity getConstraintType() {
+        return this.constraintSlaCapacity;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaCapacity);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaIsolationLevel.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaIsolationLevel.java
new file mode 100644
index 0000000000000000000000000000000000000000..572df6e45a11ccb4f9a6ef55bad26ec512e0e8f3
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaIsolationLevel.java
@@ -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.
+*/
+
+package eu.teraflow.policy.context.model;
+
+public class ConstraintTypeSlaIsolationLevel
+        implements ConstraintType<ConstraintSlaIsolationLevel> {
+
+    private final ConstraintSlaIsolationLevel constraintSlaIsolationLevel;
+
+    public ConstraintTypeSlaIsolationLevel(ConstraintSlaIsolationLevel constraintSlaIsolationLevel) {
+        this.constraintSlaIsolationLevel = constraintSlaIsolationLevel;
+    }
+
+    @Override
+    public ConstraintSlaIsolationLevel getConstraintType() {
+        return this.constraintSlaIsolationLevel;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaIsolationLevel);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaLatency.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaLatency.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ff80daa53283e0ed3f80095d61c55626093fb64
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/ConstraintTypeSlaLatency.java
@@ -0,0 +1,36 @@
+/*
+* 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.context.model;
+
+public class ConstraintTypeSlaLatency implements ConstraintType<ConstraintSlaLatency> {
+
+    private final ConstraintSlaLatency constraintSlaLatency;
+
+    public ConstraintTypeSlaLatency(ConstraintSlaLatency constraintSlaLatency) {
+        this.constraintSlaLatency = constraintSlaLatency;
+    }
+
+    @Override
+    public ConstraintSlaLatency getConstraintType() {
+        return this.constraintSlaLatency;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), constraintSlaLatency);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/Device.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java
similarity index 61%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/Device.java
rename to src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java
index b5dbae62627ca6c9f9dedbeffb6f72fdce0fb74e..b00fd235cbcd2c65606d357646fa41bd10716569 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/Device.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Device.java
@@ -14,7 +14,10 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.policy.context.model;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
 
 public class Device {
 
@@ -22,32 +25,23 @@ public class Device {
     private final String deviceType;
     private DeviceConfig deviceConfig;
     private DeviceOperationalStatus deviceOperationalStatus;
+    private List<DeviceDriverEnum> deviceDrivers;
+    private List<EndPoint> endPoints;
 
     public Device(
             String deviceId,
             String deviceType,
             DeviceConfig deviceConfig,
-            DeviceOperationalStatus deviceOperationalStatus) {
+            DeviceOperationalStatus deviceOperationalStatus,
+            List<DeviceDriverEnum> deviceDrivers,
+            List<EndPoint> endPoints) {
 
         this.deviceId = deviceId;
         this.deviceType = deviceType;
         this.deviceConfig = deviceConfig;
         this.deviceOperationalStatus = deviceOperationalStatus;
-    }
-
-    public Device(
-            String deviceId, String deviceType, DeviceOperationalStatus deviceOperationalStatus) {
-        this.deviceId = deviceId;
-        this.deviceType = deviceType;
-        this.deviceOperationalStatus = deviceOperationalStatus;
-    }
-
-    public boolean isEnabled() {
-        return deviceOperationalStatus == DeviceOperationalStatus.ENABLED;
-    }
-
-    public void enableDevice() {
-        this.deviceOperationalStatus = DeviceOperationalStatus.ENABLED;
+        this.deviceDrivers = deviceDrivers;
+        this.endPoints = endPoints;
     }
 
     public String getDeviceId() {
@@ -66,14 +60,24 @@ public class Device {
         return deviceOperationalStatus;
     }
 
-    public void setDeviceConfiguration(DeviceConfig deviceConfig) {
-        this.deviceConfig = deviceConfig;
+    public List<DeviceDriverEnum> getDeviceDrivers() {
+        return deviceDrivers;
+    }
+
+    public List<EndPoint> getEndPoints() {
+        return endPoints;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s{id=\"%s\", type=\"%s\", operationalStatus=\"%s\", config=%s",
-                getClass().getSimpleName(), deviceId, deviceType, deviceOperationalStatus, deviceConfig);
+                "%s:{deviceId:\"%s\", deviceType:\"%s\", %s, deviceOperationalStatus=\"%s\", [%s], [%s]}",
+                getClass().getSimpleName(),
+                deviceId,
+                deviceType,
+                deviceConfig,
+                deviceOperationalStatus.toString(),
+                Util.toString(deviceDrivers),
+                Util.toString(endPoints));
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceConfig.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..e6fa702dd66c9ee315856f08cb85910b4da78ce1
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceConfig.java
@@ -0,0 +1,39 @@
+/*
+* 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.context.model;
+
+import eu.teraflow.policy.common.Util;
+import java.util.List;
+
+public class DeviceConfig {
+
+    private final List<ConfigRule> configRules;
+
+    public DeviceConfig(List<ConfigRule> configRules) {
+
+        this.configRules = configRules;
+    }
+
+    public List<ConfigRule> getConfigRules() {
+        return configRules;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{[%s]}", getClass().getSimpleName(), Util.toString(configRules));
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..c98fc1fce545974a8067db2667ec1e519a058ae2
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceDriverEnum.java
@@ -0,0 +1,26 @@
+/*
+* 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.context.model;
+
+public enum DeviceDriverEnum {
+    UNDEFINED,
+    OPENCONFIG,
+    TRANSPORT_API,
+    P4,
+    IETF_NETWORK_TOPOLOGY,
+    ONF_TR_352
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceOperationalStatus.java
similarity index 94%
rename from src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java
rename to src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceOperationalStatus.java
index 163b34704e6629a0df70e4801ad1f4e665bafc19..2efe9052ec96decc74bd1f5a254fd32bca88a9e8 100644
--- a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/DeviceOperationalStatus.java
@@ -14,7 +14,7 @@
 * limitations under the License.
 */
 
-package eu.teraflow.automation.device.model;
+package eu.teraflow.policy.context.model;
 
 public enum DeviceOperationalStatus {
     UNDEFINED,
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
new file mode 100644
index 0000000000000000000000000000000000000000..a657b59218598c375cfe272f6d3dc1b2ed5bdd04
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/EndPoint.java
@@ -0,0 +1,66 @@
+/*
+* 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.context.model;
+
+import eu.teraflow.policy.common.Util;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+import java.util.List;
+
+public class EndPoint {
+    private final EndPointId endPointId;
+    private final String endPointType;
+    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;
+    }
+
+    public EndPointId getEndPointId() {
+        return endPointId;
+    }
+
+    public String getEndPointType() {
+        return endPointType;
+    }
+
+    public List<KpiSampleType> getKpiSampleTypes() {
+        return kpiSampleTypes;
+    }
+
+    public Location getEndPointLocation() {
+        return endPointLocation;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{%s, endPointType:\"%s\", [%s], %s}",
+                getClass().getSimpleName(),
+                endPointId,
+                endPointType,
+                Util.toString(kpiSampleTypes),
+                endPointLocation);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/GpsPosition.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/GpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..f5d7b488490c08a2c049ef301b3ecb3290da4ccc
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/GpsPosition.java
@@ -0,0 +1,42 @@
+/*
+* 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.context.model;
+
+public class GpsPosition {
+
+    private final float latitude;
+    private final float longitude;
+
+    public GpsPosition(float latitude, float longitude) {
+        this.latitude = latitude;
+        this.longitude = longitude;
+    }
+
+    public float getLatitude() {
+        return latitude;
+    }
+
+    public float getLongitude() {
+        return longitude;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{latitude:\"%f\", longitude:\"%f\"}", getClass().getSimpleName(), latitude, longitude);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/IsolationLevelEnum.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/IsolationLevelEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..f7c3a12673ea1e12d2a82e3ddf3c6f8f916ee0db
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/IsolationLevelEnum.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.policy.context.model;
+
+public enum IsolationLevelEnum {
+    NO_ISOLATION,
+    PHYSICAL_ISOLATION,
+    LOGICAL_ISOLATION,
+    PROCESS_ISOLATION,
+    PHYSICAL_MEMORY_ISOLATION,
+    PHYSICAL_NETWORK_ISOLATION,
+    VIRTUAL_RESOURCE_ISOLATION,
+    NETWORK_FUNCTIONS_ISOLATION,
+    SERVICE_ISOLATION
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Location.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Location.java
new file mode 100644
index 0000000000000000000000000000000000000000..692e1f01b71d6205d2b6eb9d78dad2b0d3e1bcf4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Location.java
@@ -0,0 +1,35 @@
+/*
+* 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.context.model;
+
+public class Location {
+
+    private final LocationType<?> locationType;
+
+    public Location(LocationType<?> locationType) {
+        this.locationType = locationType;
+    }
+
+    public LocationType getLocationType() {
+        return locationType;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), locationType);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationType.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationType.java
new file mode 100644
index 0000000000000000000000000000000000000000..49bf9e9af37eff86a1a6717d0bbd8924f01e2d31
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationType.java
@@ -0,0 +1,22 @@
+/*
+* 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.context.model;
+
+public interface LocationType<T> {
+
+    public T getLocationType();
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeGpsPosition.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeGpsPosition.java
new file mode 100644
index 0000000000000000000000000000000000000000..4bc44cc4e8c098e1347f43f38f6eafae325da1ee
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeGpsPosition.java
@@ -0,0 +1,19 @@
+package eu.teraflow.policy.context.model;
+
+public class LocationTypeGpsPosition implements LocationType<GpsPosition> {
+    private final GpsPosition gpsPosition;
+
+    public LocationTypeGpsPosition(GpsPosition gpsPosition) {
+        this.gpsPosition = gpsPosition;
+    }
+
+    @Override
+    public GpsPosition getLocationType() {
+        return this.gpsPosition;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s}", getClass().getSimpleName(), gpsPosition);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeRegion.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeRegion.java
new file mode 100644
index 0000000000000000000000000000000000000000..f857aa507439465dc3c3d7b3e514b8ed1185b532
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/LocationTypeRegion.java
@@ -0,0 +1,35 @@
+/*
+* 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.context.model;
+
+public class LocationTypeRegion implements LocationType<String> {
+    private final String region;
+
+    public LocationTypeRegion(String region) {
+        this.region = region;
+    }
+
+    @Override
+    public String getLocationType() {
+        return this.region;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{region:\"%s\"}", getClass().getSimpleName(), region);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java
index bbe684e1c79b67559ad0aa1e97059ef2852bbecf..e61179bcfa1dcc1736d81362f434fda01003696a 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/Service.java
@@ -27,6 +27,7 @@ public class Service {
     private final List<Constraint> serviceConstraints;
     private final ServiceStatus serviceStatus;
     private final ServiceConfig serviceConfig;
+    private final double timestamp;
 
     public Service(
             ServiceId serviceId,
@@ -34,13 +35,15 @@ public class Service {
             List<EndPointId> serviceEndPointIds,
             List<Constraint> serviceConstraints,
             ServiceStatus serviceStatus,
-            ServiceConfig serviceConfig) {
+            ServiceConfig serviceConfig,
+            double timestamp) {
         this.serviceId = serviceId;
         this.serviceType = serviceType;
         this.serviceEndPointIds = serviceEndPointIds;
         this.serviceConstraints = serviceConstraints;
         this.serviceStatus = serviceStatus;
         this.serviceConfig = serviceConfig;
+        this.timestamp = timestamp;
     }
 
     public ServiceId getServiceId() {
@@ -67,16 +70,21 @@ public class Service {
         return serviceConfig;
     }
 
+    public double getTimestamp() {
+        return timestamp;
+    }
+
     @Override
     public String toString() {
         return String.format(
-                "%s:{%s, serviceType:\"%s\", [%s], [%s], %s, %s}",
+                "%s:{%s, serviceType:\"%s\", [%s], [%s], %s, %s, timestamp:\"%f\"}",
                 getClass().getSimpleName(),
                 serviceId,
                 serviceType.toString(),
                 Util.toString(serviceEndPointIds),
                 Util.toString(serviceConstraints),
                 serviceStatus,
-                serviceConfig);
+                serviceConfig,
+                timestamp);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/context/model/SliceId.java b/src/policy/src/main/java/eu/teraflow/policy/context/model/SliceId.java
new file mode 100644
index 0000000000000000000000000000000000000000..57dbe5ff9fac4e88560f8d1ccecf4b2113705afc
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/context/model/SliceId.java
@@ -0,0 +1,41 @@
+/*
+* 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.context.model;
+
+public class SliceId {
+    private final String contextId;
+    private final String id;
+
+    public SliceId(String contextId, String id) {
+        this.contextId = contextId;
+        this.id = id;
+    }
+
+    public String getContextId() {
+        return contextId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{contextId:\"%s\", id:\"%s\"}", getClass().getSimpleName(), contextId, id);
+    }
+}
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 714cc5582cce4ce3e606851acb2f2f2b62614e29..df92c5c1af8a5bf47df980dcea4db1d2309351b4 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
@@ -24,7 +24,8 @@ public class PolicyRuleCondition {
     private final NumericalOperator numericalOperator;
     private final KpiValue<?> kpiValue;
 
-    public PolicyRuleCondition(String kpiId, NumericalOperator numericalOperator, KpiValue kpiValue) {
+    public PolicyRuleCondition(
+            String kpiId, NumericalOperator numericalOperator, KpiValue<?> kpiValue) {
         this.kpiId = kpiId;
         this.numericalOperator = numericalOperator;
         this.kpiValue = kpiValue;
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac216ee7cec55efbd7f169679b4e0eebad0f3950
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmDescriptor.java
@@ -0,0 +1,65 @@
+/*
+* 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.monitoring.model;
+
+public class AlarmDescriptor {
+    private final String alarmDescription;
+    private final String name;
+    private final String kpiId;
+    private final KpiValueRange kpiValueRange;
+    private final String timestamp;
+
+    public AlarmDescriptor(
+            String alarmDescription,
+            String name,
+            String kpiId,
+            KpiValueRange kpiValueRange,
+            String timestamp) {
+        this.alarmDescription = alarmDescription;
+        this.name = name;
+        this.kpiId = kpiId;
+        this.kpiValueRange = kpiValueRange;
+        this.timestamp = timestamp;
+    }
+
+    public String getAlarmDescription() {
+        return alarmDescription;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getKpiId() {
+        return kpiId;
+    }
+
+    public KpiValueRange getKpiValueRange() {
+        return kpiValueRange;
+    }
+
+    public String getTimestamp() {
+        return timestamp;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{alarmDescription:\"%s\", name:\"%s\", kpiId:\"%s\", %s, timestamp:\"%s\"}",
+                getClass().getSimpleName(), alarmDescription, name, kpiId, kpiValueRange, timestamp);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
new file mode 100644
index 0000000000000000000000000000000000000000..4730c18d068e2372dffee9507d0d74f9208abae9
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/AlarmResponse.java
@@ -0,0 +1,49 @@
+/*
+* 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.monitoring.model;
+
+public class AlarmResponse {
+
+    private final String alarmId;
+    private final String text;
+    private final KpiValue<?> kpiValue;
+
+    public AlarmResponse(String alarmId, String text, KpiValue<?> kpiValue) {
+        this.alarmId = alarmId;
+        this.text = text;
+        this.kpiValue = kpiValue;
+    }
+
+    public String getAlarmId() {
+        return alarmId;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public KpiValue getKpiValue() {
+        return kpiValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{alarmId:\"%s\", text:\"%s\", %s}",
+                getClass().getSimpleName(), alarmId, text, kpiValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
index 4d84c29d4f32cd2605cf2d20a67b0fa41f801ab1..c042240298fdea49ca1509ac2563e849b16575c5 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/Kpi.java
@@ -20,9 +20,9 @@ public class Kpi {
 
     private final String kpiId;
     private final String timestamp;
-    private final String kpiValue;
+    private final KpiValue<?> kpiValue;
 
-    public Kpi(String kpiId, String timestamp, String kpiValue) {
+    public Kpi(String kpiId, String timestamp, KpiValue<?> kpiValue) {
         this.kpiId = kpiId;
         this.timestamp = timestamp;
         this.kpiValue = kpiValue;
@@ -36,14 +36,14 @@ public class Kpi {
         return timestamp;
     }
 
-    public String getKpiValue() {
+    public KpiValue getKpiValue() {
         return kpiValue;
     }
 
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiId:\"%s\", timeStamp:\"%s\", kpiValue:\"%s\"}",
+                "%s:{kpiId:\"%s\", timeStamp:\"%s\", %s}",
                 getClass().getSimpleName(), kpiId, timestamp, kpiValue);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
index 85e09ce2e6f7ac297657e59c7868fbbd750675b8..107c1033549facafc843e182090c0d8cd95e51e5 100644
--- a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiDescriptor.java
@@ -18,6 +18,7 @@ package eu.teraflow.policy.monitoring.model;
 
 import eu.teraflow.policy.context.model.EndPointId;
 import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.SliceId;
 import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
 
 public class KpiDescriptor {
@@ -27,18 +28,21 @@ public class KpiDescriptor {
     private final String deviceId;
     private final EndPointId endPointId;
     private final ServiceId serviceId;
+    private final SliceId sliceId;
 
     public KpiDescriptor(
             String kpiDescription,
             KpiSampleType kpiSampleType,
             String deviceId,
             EndPointId endPointId,
-            ServiceId serviceId) {
+            ServiceId serviceId,
+            SliceId sliceId) {
         this.kpiDescription = kpiDescription;
         this.kpiSampleType = kpiSampleType;
         this.deviceId = deviceId;
         this.endPointId = endPointId;
         this.serviceId = serviceId;
+        this.sliceId = sliceId;
     }
 
     public String getKpiDescription() {
@@ -61,15 +65,20 @@ public class KpiDescriptor {
         return serviceId;
     }
 
+    public SliceId getSliceId() {
+        return sliceId;
+    }
+
     @Override
     public String toString() {
         return String.format(
-                "%s:{kpiDescription:\"%s\", kpiSampleType:\"%s\", deviceId:\"%s\", %s, %s}",
+                "%s:{kpiDescription:\"%s\", kpiSampleType:\"%s\", deviceId:\"%s\", %s, %s, %s}",
                 getClass().getSimpleName(),
                 kpiDescription,
                 kpiSampleType.toString(),
                 deviceId,
                 endPointId,
-                serviceId);
+                serviceId,
+                sliceId);
     }
 }
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
new file mode 100644
index 0000000000000000000000000000000000000000..baa7c32c4e59afc47f3c91c8c65691457b4c6df4
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/KpiValueRange.java
@@ -0,0 +1,41 @@
+/*
+* 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.monitoring.model;
+
+public class KpiValueRange {
+
+    private final KpiValue<?> kpiMinValue;
+    private final KpiValue<?> kpiMaxValue;
+
+    public KpiValueRange(KpiValue<?> kpiMinValue, KpiValue<?> kpiMaxValue) {
+        this.kpiMinValue = kpiMinValue;
+        this.kpiMaxValue = kpiMaxValue;
+    }
+
+    public KpiValue getKpiMinValue() {
+        return kpiMinValue;
+    }
+
+    public KpiValue getKpiMaxValue() {
+        return kpiMaxValue;
+    }
+
+    @Override
+    public String toString() {
+        return String.format("%s:{%s, %s}", getClass().getSimpleName(), kpiMinValue, kpiMaxValue);
+    }
+}
diff --git a/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
new file mode 100644
index 0000000000000000000000000000000000000000..ced38b3f9f76239ee83687f14587da168dc7c320
--- /dev/null
+++ b/src/policy/src/main/java/eu/teraflow/policy/monitoring/model/SubsDescriptor.java
@@ -0,0 +1,70 @@
+/*
+* 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.monitoring.model;
+
+public class SubsDescriptor {
+    private final String kpiId;
+    private final float samplingDurationS;
+    private final float samplingIntervalS;
+    private final String startDate;
+    private final String endDate;
+
+    public SubsDescriptor(
+            String kpiId,
+            float samplingDurationS,
+            float samplingIntervalS,
+            String startDate,
+            String endDate) {
+        this.kpiId = kpiId;
+        this.samplingDurationS = samplingDurationS;
+        this.samplingIntervalS = samplingIntervalS;
+        this.startDate = startDate;
+        this.endDate = endDate;
+    }
+
+    public String getKpiId() {
+        return kpiId;
+    }
+
+    public float getSamplingDurationS() {
+        return samplingDurationS;
+    }
+
+    public float getSamplingIntervalS() {
+        return samplingIntervalS;
+    }
+
+    public String getStartDate() {
+        return startDate;
+    }
+
+    public String getEndDate() {
+        return endDate;
+    }
+
+    @Override
+    public String toString() {
+        return String.format(
+                "%s:{kpiId:\"%s\", samplingDurationS:\"%f\", samplingIntervalS:\"%f\", startDate:\"%s\", endDate:\"%s\"}",
+                getClass().getSimpleName(),
+                kpiId,
+                samplingDurationS,
+                samplingIntervalS,
+                startDate,
+                endDate);
+    }
+}
diff --git a/src/policy/src/main/proto/context-policy.proto b/src/policy/src/main/proto/context-policy.proto
new file mode 120000
index 0000000000000000000000000000000000000000..5c0888e9edf15c8fa540e85afabb98342c0e0c51
--- /dev/null
+++ b/src/policy/src/main/proto/context-policy.proto
@@ -0,0 +1 @@
+../../../../../proto/context-policy.proto
\ No newline at end of file
diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..faaa49c3488cfa7e81f696637a8a7a4393d8f824
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/ConfigRuleTypeTest.java
@@ -0,0 +1,90 @@
+/*
+* 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 eu.teraflow.policy.acl.AclAction;
+import eu.teraflow.policy.acl.AclEntry;
+import eu.teraflow.policy.acl.AclForwardActionEnum;
+import eu.teraflow.policy.acl.AclLogActionEnum;
+import eu.teraflow.policy.acl.AclMatch;
+import eu.teraflow.policy.acl.AclRuleSet;
+import eu.teraflow.policy.acl.AclRuleTypeEnum;
+import eu.teraflow.policy.context.model.ConfigRuleAcl;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.TopologyId;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class ConfigRuleTypeTest {
+
+    private AclMatch createAclMatch() {
+
+        return new AclMatch(1, 2, "192.168.3.52", "192.168.4.192", 3224, 3845, 5, 10);
+    }
+
+    private AclAction createAclAction() {
+
+        return new AclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+    }
+
+    private AclEntry createAclEntry(AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+    }
+
+    @Test
+    void shouldExtractConfigRuleCustomFromConfigRuleTypeCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom);
+
+        assertThat(configRuleTypeCustom.getConfigRuleType()).isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldExtractConfigRuleAclFromConfigRuleTypeAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var aclMatch = createAclMatch();
+        final var aclAction = createAclAction();
+        final var aclEntry = createAclEntry(aclMatch, aclAction);
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(expectedConfigRuleAcl);
+
+        assertThat(configRuleTypeAcl.getConfigRuleType()).isEqualTo(expectedConfigRuleAcl);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..71d44bd3182200f456a9f9d0cb5f02ad0b222d3f
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/ConstraintTypeTest.java
@@ -0,0 +1,134 @@
+/*
+* 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 eu.teraflow.policy.context.model.ConstraintCustom;
+import eu.teraflow.policy.context.model.ConstraintEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintSchedule;
+import eu.teraflow.policy.context.model.ConstraintSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintSlaLatency;
+import eu.teraflow.policy.context.model.ConstraintTypeCustom;
+import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintTypeSchedule;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.IsolationLevelEnum;
+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 org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class ConstraintTypeTest {
+
+    @Test
+    void shouldExtractConstraintCustomFromConstraintTypeCustom() {
+        final var constraintType = "constraintType";
+        final var constraintValue = "constraintValue";
+
+        final var expectedConstraintCustom = new ConstraintCustom(constraintType, constraintValue);
+        final var constraintTypeCustom = new ConstraintTypeCustom(expectedConstraintCustom);
+
+        assertThat(constraintTypeCustom.getConstraintType()).isEqualTo(expectedConstraintCustom);
+    }
+
+    @Test
+    void shouldExtractConstraintEndPointLocationFromConstraintTypeEndPointLocation() {
+        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 locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var expectedConstraintEndPointLocation =
+                new ConstraintEndPointLocation(endPointId, location);
+        final var constraintTypeEndPointLocation =
+                new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation);
+
+        assertThat(constraintTypeEndPointLocation.getConstraintType())
+                .isEqualTo(expectedConstraintEndPointLocation);
+    }
+
+    @Test
+    void shouldExtractConstraintScheduleFromConstraintTypeSchedule() {
+        final var startTimestamp = 4.7f;
+        final var durationDays = 97.4f;
+
+        final var expectedConstraintSchedule = new ConstraintSchedule(startTimestamp, durationDays);
+        final var constraintTypeSchedule = new ConstraintTypeSchedule(expectedConstraintSchedule);
+
+        assertThat(constraintTypeSchedule.getConstraintType()).isEqualTo(expectedConstraintSchedule);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaAvailabilityFromConstraintTypeSlaAvailability() {
+        final var numDisjointPaths = 88;
+        final var allActive = false;
+
+        final var expectedConstraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisjointPaths, allActive);
+        final var constraintTypeSlaAvailability =
+                new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability);
+
+        assertThat(constraintTypeSlaAvailability.getConstraintType())
+                .isEqualTo(expectedConstraintSlaAvailability);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaCapacityFromConstraintTypeSlaCapacity() {
+        final var capacityGbps = 0.2f;
+
+        final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+        final var constraintTypeSlaCapacity =
+                new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity);
+
+        assertThat(constraintTypeSlaCapacity.getConstraintType())
+                .isEqualTo(expectedConstraintSlaCapacity);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaIsolationLevelFromConstraintTypeSlaIsolationLevel() {
+        final var expectedConstraintSlaIsolationLevel =
+                new ConstraintSlaIsolationLevel(IsolationLevelEnum.PHYSICAL_ISOLATION);
+        final var constraintTypeSlaIsolationLevel =
+                new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel);
+
+        assertThat(constraintTypeSlaIsolationLevel.getConstraintType())
+                .isEqualTo(expectedConstraintSlaIsolationLevel);
+    }
+
+    @Test
+    void shouldExtractConstraintSlaLatencyFromConstraintTypeSlaLatency() {
+        final var capacityGbps = 0.2f;
+
+        final var expectedConstraintSlaLatency = new ConstraintSlaLatency(capacityGbps);
+        final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(expectedConstraintSlaLatency);
+
+        assertThat(constraintTypeSlaLatency.getConstraintType())
+                .isEqualTo(expectedConstraintSlaLatency);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..d89d62c63486cf571f2606786b805abdc066204c
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/LocationTypeTest.java
@@ -0,0 +1,49 @@
+/*
+* 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 eu.teraflow.policy.context.model.GpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeGpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class LocationTypeTest {
+
+    @Test
+    void shouldExtractRegionFromLocationTypeRegion() {
+        final var expectedRegion = "ATH";
+
+        final var locationTypeRegion = new LocationTypeRegion(expectedRegion);
+
+        assertThat(locationTypeRegion.getLocationType()).isEqualTo(expectedRegion);
+    }
+
+    @Test
+    void shouldExtractLocationGpsPositionFromLocationTypeGpsPosition() {
+        final var latitude = 3.99f;
+        final var longitude = 77.32f;
+
+        final var expectedLocationGpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(expectedLocationGpsPosition);
+
+        assertThat(locationTypeGpsPosition.getLocationType()).isEqualTo(expectedLocationGpsPosition);
+    }
+}
diff --git a/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e8c582013366c993992ff3fd504bb9b2c7578c17
--- /dev/null
+++ b/src/policy/src/test/java/eu/teraflow/policy/SerializerTest.java
@@ -0,0 +1,3601 @@
+/*
+* 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
+*provideKpiValueRanges
+*      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 acl.Acl;
+import context.ContextOuterClass;
+import context.ContextOuterClass.ContextId;
+import context.ContextOuterClass.DeviceId;
+import context.ContextOuterClass.DeviceOperationalStatusEnum;
+import context.ContextOuterClass.Uuid;
+import eu.teraflow.policy.acl.AclAction;
+import eu.teraflow.policy.acl.AclEntry;
+import eu.teraflow.policy.acl.AclForwardActionEnum;
+import eu.teraflow.policy.acl.AclLogActionEnum;
+import eu.teraflow.policy.acl.AclMatch;
+import eu.teraflow.policy.acl.AclRuleSet;
+import eu.teraflow.policy.acl.AclRuleTypeEnum;
+import eu.teraflow.policy.context.model.ConfigActionEnum;
+import eu.teraflow.policy.context.model.ConfigRule;
+import eu.teraflow.policy.context.model.ConfigRuleAcl;
+import eu.teraflow.policy.context.model.ConfigRuleCustom;
+import eu.teraflow.policy.context.model.ConfigRuleTypeAcl;
+import eu.teraflow.policy.context.model.ConfigRuleTypeCustom;
+import eu.teraflow.policy.context.model.Constraint;
+import eu.teraflow.policy.context.model.ConstraintCustom;
+import eu.teraflow.policy.context.model.ConstraintEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintSchedule;
+import eu.teraflow.policy.context.model.ConstraintSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintSlaLatency;
+import eu.teraflow.policy.context.model.ConstraintTypeCustom;
+import eu.teraflow.policy.context.model.ConstraintTypeEndPointLocation;
+import eu.teraflow.policy.context.model.ConstraintTypeSchedule;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaAvailability;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaCapacity;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaIsolationLevel;
+import eu.teraflow.policy.context.model.ConstraintTypeSlaLatency;
+import eu.teraflow.policy.context.model.Device;
+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.EndPoint;
+import eu.teraflow.policy.context.model.EndPointId;
+import eu.teraflow.policy.context.model.Event;
+import eu.teraflow.policy.context.model.EventTypeEnum;
+import eu.teraflow.policy.context.model.GpsPosition;
+import eu.teraflow.policy.context.model.IsolationLevelEnum;
+import eu.teraflow.policy.context.model.Location;
+import eu.teraflow.policy.context.model.LocationTypeGpsPosition;
+import eu.teraflow.policy.context.model.LocationTypeRegion;
+import eu.teraflow.policy.context.model.Service;
+import eu.teraflow.policy.context.model.ServiceConfig;
+import eu.teraflow.policy.context.model.ServiceId;
+import eu.teraflow.policy.context.model.ServiceStatus;
+import eu.teraflow.policy.context.model.ServiceStatusEnum;
+import eu.teraflow.policy.context.model.ServiceTypeEnum;
+import eu.teraflow.policy.context.model.SliceId;
+import eu.teraflow.policy.context.model.TopologyId;
+import eu.teraflow.policy.kpi_sample_types.model.KpiSampleType;
+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.PolicyRuleService;
+import eu.teraflow.policy.model.PolicyRuleState;
+import eu.teraflow.policy.model.RuleState;
+import eu.teraflow.policy.monitoring.model.AlarmDescriptor;
+import eu.teraflow.policy.monitoring.model.AlarmResponse;
+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.Kpi;
+import eu.teraflow.policy.monitoring.model.KpiDescriptor;
+import eu.teraflow.policy.monitoring.model.KpiValue;
+import eu.teraflow.policy.monitoring.model.KpiValueRange;
+import eu.teraflow.policy.monitoring.model.StringKpiValue;
+import eu.teraflow.policy.monitoring.model.SubsDescriptor;
+import io.quarkus.test.junit.QuarkusTest;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import javax.inject.Inject;
+import kpi_sample_types.KpiSampleTypes;
+import monitoring.Monitoring;
+import monitoring.Monitoring.AlarmID;
+import monitoring.Monitoring.KpiId;
+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 policy.Policy;
+import policy.Policy.PolicyRuleId;
+import policy.PolicyAction;
+import policy.PolicyCondition;
+
+@QuarkusTest
+class SerializerTest {
+    @Inject Serializer serializer;
+
+    private AclMatch createAclMatch(
+            int dscp,
+            int protocol,
+            String srcAddress,
+            String dstAddress,
+            int srcPort,
+            int dstPort,
+            int startMplsLabel,
+            int endMplsLabel) {
+        return new AclMatch(
+                dscp, protocol, srcAddress, dstAddress, srcPort, dstPort, startMplsLabel, endMplsLabel);
+    }
+
+    private AclAction createAclAction(
+            AclForwardActionEnum forwardActionEnum, AclLogActionEnum logActionEnum) {
+
+        return new AclAction(forwardActionEnum, logActionEnum);
+    }
+
+    private AclEntry createAclEntry(
+            int sequenceId, String description, AclMatch aclMatch, AclAction aclAction) {
+
+        return new AclEntry(sequenceId, description, aclMatch, aclAction);
+    }
+
+    private PolicyRuleBasic createPolicyRuleBasic() {
+        final var expectedPolicyRuleId = "expectedPolicyRuleId";
+        final var expectedPolicyRuleState = new PolicyRuleState(RuleState.POLICY_EFFECTIVE);
+        final var expectedPriority = 3;
+
+        final var firstKpiValue = new IntegerKpiValue(22);
+        final var secondKpiValue = new FloatKpiValue(69.1f);
+
+        final var firstExpectedPolicyRuleCondition =
+                new PolicyRuleCondition(
+                        "firstExpectedPolicyRuleConditionVariable",
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN,
+                        firstKpiValue);
+        final var secondExpectedPolicyRuleCondition =
+                new PolicyRuleCondition(
+                        "secondExpectedPolicyRuleConditionVariable",
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_EQUAL,
+                        secondKpiValue);
+
+        final var expectedPolicyRuleConditions =
+                List.of(firstExpectedPolicyRuleCondition, secondExpectedPolicyRuleCondition);
+
+        final var expectedBooleanOperator = BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR;
+
+        final var firstExpectedPolicyRuleAction =
+                new PolicyRuleAction(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
+                        List.of("parameter1", "parameter2"));
+
+        final var secondExpectedPolicyRuleAction =
+                new PolicyRuleAction(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
+                        List.of("parameter3", "parameter4"));
+
+        final var expectedPolicyRuleActions =
+                List.of(firstExpectedPolicyRuleAction, secondExpectedPolicyRuleAction);
+
+        return new PolicyRuleBasic(
+                expectedPolicyRuleId,
+                expectedPolicyRuleState,
+                expectedPriority,
+                expectedPolicyRuleConditions,
+                expectedBooleanOperator,
+                expectedPolicyRuleActions);
+    }
+
+    private ConfigRule createConfigRule() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+        return new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl);
+    }
+
+    @Test
+    void shouldSerializeDeviceId() {
+        final var deviceId = "deviceId";
+
+        final var deviceIdUuid = serializer.serializeUuid(deviceId);
+        final var expectedDeviceId =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceId);
+
+        assertThat(serializedDeviceId).usingRecursiveComparison().isEqualTo(expectedDeviceId);
+    }
+
+    @Test
+    void shouldDeserializeDeviceId() {
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var serializedDeviceIdUuid = serializer.serializeUuid(expectedDeviceId);
+        final var serializedDeviceId =
+                DeviceId.newBuilder().setDeviceUuid(serializedDeviceIdUuid).build();
+
+        final var deviceId = serializer.deserialize(serializedDeviceId);
+
+        assertThat(deviceId).isEqualTo(expectedDeviceId);
+    }
+
+    @Test
+    void shouldSerializeContextId() {
+        final var contextId = "contextId";
+
+        final var contextIdUuid = serializer.serializeUuid(contextId);
+
+        final var expectedContextId =
+                ContextOuterClass.ContextId.newBuilder().setContextUuid(contextIdUuid).build();
+
+        final var serializedContextId = serializer.serializeContextId(contextId);
+
+        assertThat(serializedContextId).usingRecursiveComparison().isEqualTo(expectedContextId);
+    }
+
+    @Test
+    void shouldDeserializeContextId() {
+        final var expectedContextId = "expectedContextId";
+
+        final var serializedContextIdUuid = serializer.serializeUuid(expectedContextId);
+        final var serializedContextId =
+                ContextId.newBuilder().setContextUuid(serializedContextIdUuid).build();
+
+        final var contextId = serializer.deserialize(serializedContextId);
+
+        assertThat(contextId).isEqualTo(expectedContextId);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleId() {
+        final var policyRuleId = "policyRuleId";
+
+        final var policyRuleIdUuid = serializer.serializeUuid(policyRuleId);
+        final var expectedPolicyRuleId =
+                Policy.PolicyRuleId.newBuilder().setUuid(policyRuleIdUuid).build();
+
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(policyRuleId);
+
+        assertThat(serializedPolicyRuleId).usingRecursiveComparison().isEqualTo(expectedPolicyRuleId);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleId() {
+        final var expectedPolicyRuleId = "expectedPolicyRuleId";
+
+        final var serializedPolicyRuleIdUuid = serializer.serializeUuid(expectedPolicyRuleId);
+        final var serializedPolicyRuleId =
+                PolicyRuleId.newBuilder().setUuid(serializedPolicyRuleIdUuid).build();
+
+        final var policyRuleId = serializer.deserialize(serializedPolicyRuleId);
+
+        assertThat(policyRuleId).isEqualTo(expectedPolicyRuleId);
+    }
+
+    @Test
+    void shouldSerializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+        final var topologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedContextId = serializer.serializeContextId(expectedContextId);
+        final var serializedIdUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedIdUuid)
+                        .build();
+
+        final var serializedTopologyId = serializer.serialize(topologyId);
+
+        assertThat(serializedTopologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    @Test
+    void shouldDeserializeTopologyId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+
+        final var expectedTopologyId = new TopologyId(expectedContextId, expectedId);
+
+        final var serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var topologyId = serializer.deserialize(serializedTopologyId);
+
+        assertThat(topologyId).usingRecursiveComparison().isEqualTo(expectedTopologyId);
+    }
+
+    private static Stream<Arguments> provideConfigActionEnum() {
+        return Stream.of(
+                Arguments.of(ConfigActionEnum.SET, ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET),
+                Arguments.of(
+                        ConfigActionEnum.DELETE, ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE),
+                Arguments.of(
+                        ConfigActionEnum.UNDEFINED, ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideConfigActionEnum")
+    void shouldSerializeConfigActionEnum(
+            ConfigActionEnum configActionEnum,
+            ContextOuterClass.ConfigActionEnum expectedConfigActionEnum) {
+        final var serializedType = serializer.serialize(configActionEnum);
+        assertThat(serializedType.getNumber()).isEqualTo(expectedConfigActionEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideConfigActionEnum")
+    void shouldDeserializeConfigActionEnum(
+            ConfigActionEnum expectedConfigActionEnum,
+            ContextOuterClass.ConfigActionEnum serializedConfigActionEnum) {
+
+        final var configActionEnum = serializer.deserialize(serializedConfigActionEnum);
+
+        assertThat(configActionEnum).isEqualTo(expectedConfigActionEnum);
+    }
+
+    private static Stream<Arguments> provideAclRuleTypeEnum() {
+        return Stream.of(
+                Arguments.of(AclRuleTypeEnum.IPV4, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4),
+                Arguments.of(AclRuleTypeEnum.IPV6, Acl.AclRuleTypeEnum.ACLRULETYPE_IPV6),
+                Arguments.of(AclRuleTypeEnum.L2, Acl.AclRuleTypeEnum.ACLRULETYPE_L2),
+                Arguments.of(AclRuleTypeEnum.MPLS, Acl.AclRuleTypeEnum.ACLRULETYPE_MPLS),
+                Arguments.of(AclRuleTypeEnum.MIXED, Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED),
+                Arguments.of(AclRuleTypeEnum.UNDEFINED, Acl.AclRuleTypeEnum.ACLRULETYPE_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldSerializeAclRuleTypeEnum(
+            AclRuleTypeEnum aclRuleTypeEnum, Acl.AclRuleTypeEnum expectedAclRuleTypeEnum) {
+        final var serializedAclRuleTypeEnum = serializer.serialize(aclRuleTypeEnum);
+        assertThat(serializedAclRuleTypeEnum.getNumber())
+                .isEqualTo(expectedAclRuleTypeEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclRuleTypeEnum")
+    void shouldDeserializeAclRuleTypeEnum(
+            AclRuleTypeEnum expectedAclRuleTypeEnum, Acl.AclRuleTypeEnum serializedAclRuleTypeEnum) {
+        final var aclRuleTypeEnum = serializer.deserialize(serializedAclRuleTypeEnum);
+        assertThat(aclRuleTypeEnum).isEqualTo(expectedAclRuleTypeEnum);
+    }
+
+    private static Stream<Arguments> provideAclForwardActionEnum() {
+        return Stream.of(
+                Arguments.of(AclForwardActionEnum.DROP, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_DROP),
+                Arguments.of(
+                        AclForwardActionEnum.ACCEPT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT),
+                Arguments.of(
+                        AclForwardActionEnum.REJECT, Acl.AclForwardActionEnum.ACLFORWARDINGACTION_REJECT),
+                Arguments.of(
+                        AclForwardActionEnum.UNDEFINED,
+                        Acl.AclForwardActionEnum.ACLFORWARDINGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldSerializeAclForwardActionEnum(
+            AclForwardActionEnum aclForwardActionEnum,
+            Acl.AclForwardActionEnum expectedAclForwardActionEnum) {
+        final var serializedAclForwardActionEnum = serializer.serialize(aclForwardActionEnum);
+        assertThat(serializedAclForwardActionEnum.getNumber())
+                .isEqualTo(expectedAclForwardActionEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclForwardActionEnum")
+    void shouldDeserializeAclForwardActionEnum(
+            AclForwardActionEnum expectedAclForwardActionEnum,
+            Acl.AclForwardActionEnum serializedAclForwardActionEnum) {
+        final var aclForwardActionEnum = serializer.deserialize(serializedAclForwardActionEnum);
+        assertThat(aclForwardActionEnum).isEqualTo(expectedAclForwardActionEnum);
+    }
+
+    private static Stream<Arguments> provideAclLogActionEnum() {
+        return Stream.of(
+                Arguments.of(AclLogActionEnum.NO_LOG, Acl.AclLogActionEnum.ACLLOGACTION_NOLOG),
+                Arguments.of(AclLogActionEnum.SYSLOG, Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG),
+                Arguments.of(AclLogActionEnum.UNDEFINED, Acl.AclLogActionEnum.ACLLOGACTION_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldSerializeAclLogActionEnum(
+            AclLogActionEnum aclLogActionEnum, Acl.AclLogActionEnum expectedAclLogActionEnum) {
+        final var serializedAclLogActionEnum = serializer.serialize(aclLogActionEnum);
+        assertThat(serializedAclLogActionEnum.getNumber())
+                .isEqualTo(expectedAclLogActionEnum.getNumber());
+    }
+
+    @Test
+    void shouldSerializeAclAction() {
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        assertThat(serializedAclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldDeserializeAclAction() {
+        final var expectedAclAction =
+                createAclAction(AclForwardActionEnum.DROP, AclLogActionEnum.NO_LOG);
+
+        final var serializedAclAction = serializer.serialize(expectedAclAction);
+        final var aclAction = serializer.deserialize(serializedAclAction);
+
+        assertThat(aclAction).usingRecursiveComparison().isEqualTo(expectedAclAction);
+    }
+
+    @Test
+    void shouldSerializeAclMatch() {
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+
+        assertThat(serializedAclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldDeserializeAclMatch() {
+        final var expectedAclMatch = createAclMatch(7, 2, "127.0.0.5", "127.0.0.6", 32456, 3123, 5, 10);
+
+        final var serializedAclMatch = serializer.serialize(expectedAclMatch);
+        final var aclMatch = serializer.deserialize(serializedAclMatch);
+
+        assertThat(aclMatch).usingRecursiveComparison().isEqualTo(expectedAclMatch);
+    }
+
+    @Test
+    void shouldSerializeAclEntry() {
+        final var sequenceId = 1;
+        final var description = "aclEntryDescription";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclMatch = serializer.serialize(aclMatch);
+        final var serializedAclAction = serializer.serialize(aclAction);
+
+        final var expectedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(sequenceId)
+                        .setDescription(description)
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+
+        assertThat(serializedAclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldDeserializeAclEntry() {
+        final var sequenceId = 7;
+        final var description = "aclEntryDescriptor";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var expectedAclEntry = createAclEntry(sequenceId, description, aclMatch, aclAction);
+
+        final var serializedAclEntry = serializer.serialize(expectedAclEntry);
+        final var aclEntry = serializer.deserialize(serializedAclEntry);
+
+        assertThat(aclEntry).usingRecursiveComparison().isEqualTo(expectedAclEntry);
+    }
+
+    @Test
+    void shouldSerializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclEntry = serializer.serialize(aclEntry);
+        final var serializedAclEntries = List.of(serializedAclEntry);
+
+        final var expectedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName(aclRuleSetName)
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_MIXED)
+                        .setDescription(aclRuleSetDescription)
+                        .setUserId(aclRuleSetUserId)
+                        .addAllEntries(serializedAclEntries)
+                        .build();
+
+        final var serializedAclRuleset = serializer.serialize(aclRuleSet);
+
+        assertThat(serializedAclRuleset).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @Test
+    void shouldDeserializeAclRuleSet() {
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var expectedAclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet = serializer.serialize(expectedAclRuleSet);
+        final var aclRuleSet = serializer.deserialize(serializedAclRuleSet);
+
+        assertThat(aclRuleSet).usingRecursiveComparison().isEqualTo(expectedAclRuleSet);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideAclLogActionEnum")
+    void shouldDeserializeAclLogActionEnum(
+            AclLogActionEnum expectedAclLogActionEnum, Acl.AclLogActionEnum serializedAclLogActionEnum) {
+        final var aclLogActionEnum = serializer.deserialize(serializedAclLogActionEnum);
+        assertThat(aclLogActionEnum).isEqualTo(expectedAclLogActionEnum);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedAclRuleSet = serializer.serialize(aclRuleSet);
+
+        final var expectedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
+
+        final var serializedConfigRuleAcl = serializer.serialize(configRuleAcl);
+
+        assertThat(serializedConfigRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleAcl() {
+        final var expectedTopologyId = new TopologyId("contextId", "id");
+        final var expectedDeviceId = "expectedDeviceId";
+        final var expectedId = "expectedId";
+
+        final var sequenceId = 1;
+        final var aclEntryDescription = "aclEntryDescription";
+
+        final var aclRuleSetName = "aclRuleSetName";
+        final var aclRuleSetDescription = "aclRuleSetDescription";
+        final var aclRuleSetUserId = "aclRuleSetUserId";
+
+        final var endPointId = new EndPointId(expectedTopologyId, expectedDeviceId, expectedId);
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var aclEntry = createAclEntry(sequenceId, aclEntryDescription, aclMatch, aclAction);
+        final var aclRuleSet =
+                new AclRuleSet(
+                        aclRuleSetName,
+                        AclRuleTypeEnum.MIXED,
+                        aclRuleSetDescription,
+                        aclRuleSetUserId,
+                        List.of(aclEntry));
+
+        final var expectedConfigRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var serializedConfigRuleAcl = serializer.serialize(expectedConfigRuleAcl);
+        final var configRuleAcl = serializer.deserialize(serializedConfigRuleAcl);
+
+        assertThat(configRuleAcl).usingRecursiveComparison().isEqualTo(expectedConfigRuleAcl);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var configRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey(resourceKey)
+                        .setResourceValue(resourceValue)
+                        .build();
+
+        final var serializedConfigRuleCustom = serializer.serialize(configRuleCustom);
+
+        assertThat(serializedConfigRuleCustom)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleCustom() {
+        final var resourceKey = "resourceKey";
+        final var resourceValue = "resourceValue";
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom(resourceKey, resourceValue);
+
+        final var serializedConfigRuleCustom = serializer.serialize(expectedConfigRuleCustom);
+        final var configRuleCustom = serializer.deserialize(serializedConfigRuleCustom);
+
+        assertThat(configRuleCustom).usingRecursiveComparison().isEqualTo(expectedConfigRuleCustom);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleofTypeConfigRuleAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var expectedSerializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var expectedSerializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var expectedSerializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var expectedSerializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var expectedSerializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(expectedSerializedContextId)
+                        .setTopologyUuid(expectedSerializedTopologyIdUuid)
+                        .build();
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+
+        final var expectedSerializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(expectedSerializedTopologyId)
+                        .setDeviceId(expectedSerializedDeviceId)
+                        .setEndpointUuid(expectedSerializedEndPointIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+
+        final var expectedSerializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(1)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(1)
+                        .setEndMplsLabel(2)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 1, "127.0.0.1", "127.0.0.2", 5601, 5602, 1, 2);
+
+        final var expectedSerializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+
+        final var expectedSerializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(expectedSerializedAclMatch)
+                        .setAction(expectedSerializedAclAction)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var expectedSerializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(expectedSerializedAclEntry)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName", AclRuleTypeEnum.IPV4, "AclRuleDescription", "userId", List.of(aclEntry));
+
+        final var expectedSerializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(expectedSerializedEndPointId)
+                        .setRuleSet(expectedSerializedAclRuleSet)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+
+        final var expectedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setAcl(expectedSerializedConfigRuleAcl)
+                        .build();
+
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeAcl);
+        final var serializedConfigRule = serializer.serialize(configRule);
+
+        assertThat(serializedConfigRule).isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleOfTypeConfigRuleAcl() {
+        final var contextIdUuid = "contextId";
+        final var topologyIdUuid = "topologyUuid";
+        final var deviceIdUuid = "deviceIdUuid";
+        final var endpointIdUuid = "endpointIdUuid";
+
+        final var serializedContextId = serializer.serializeContextId(contextIdUuid);
+        final var serializedTopologyIdUuid = serializer.serializeUuid(topologyIdUuid);
+        final var serializedDeviceId = serializer.serializeDeviceId(deviceIdUuid);
+        final var serializedEndPointIdUuid = serializer.serializeUuid(endpointIdUuid);
+
+        final var topologyId = new TopologyId(contextIdUuid, topologyIdUuid);
+        final var serializedTopologyId =
+                ContextOuterClass.TopologyId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setTopologyUuid(serializedTopologyIdUuid)
+                        .build();
+
+        final var endPointId = new EndPointId(topologyId, deviceIdUuid, endpointIdUuid);
+        final var serializedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointIdUuid)
+                        .build();
+
+        final var aclMatch = createAclMatch(1, 2, "127.0.0.1", "127.0.0.2", 5601, 5602, 5, 10);
+        final var serializedAclMatch =
+                Acl.AclMatch.newBuilder()
+                        .setDscp(1)
+                        .setProtocol(2)
+                        .setSrcAddress("127.0.0.1")
+                        .setDstAddress("127.0.0.2")
+                        .setSrcPort(5601)
+                        .setDstPort(5602)
+                        .setStartMplsLabel(5)
+                        .setEndMplsLabel(10)
+                        .build();
+
+        final var aclAction = createAclAction(AclForwardActionEnum.ACCEPT, AclLogActionEnum.SYSLOG);
+        final var serializedAclAction =
+                Acl.AclAction.newBuilder()
+                        .setForwardAction(Acl.AclForwardActionEnum.ACLFORWARDINGACTION_ACCEPT)
+                        .setLogAction(Acl.AclLogActionEnum.ACLLOGACTION_SYSLOG)
+                        .build();
+
+        final var aclEntry = createAclEntry(1, "aclEntryDescription", aclMatch, aclAction);
+
+        final var serializedAclEntry =
+                Acl.AclEntry.newBuilder()
+                        .setSequenceId(1)
+                        .setDescription("aclEntryDescription")
+                        .setMatch(serializedAclMatch)
+                        .setAction(serializedAclAction)
+                        .build();
+
+        final var aclRuleSet =
+                new AclRuleSet(
+                        "aclRuleName",
+                        eu.teraflow.policy.acl.AclRuleTypeEnum.IPV4,
+                        "AclRuleDescription",
+                        "userId",
+                        List.of(aclEntry));
+
+        final var serializedAclRuleSet =
+                Acl.AclRuleSet.newBuilder()
+                        .setName("aclRuleName")
+                        .setType(Acl.AclRuleTypeEnum.ACLRULETYPE_IPV4)
+                        .setDescription("AclRuleDescription")
+                        .setUserId("userId")
+                        .addEntries(serializedAclEntry)
+                        .build();
+
+        final var configRuleAcl = new ConfigRuleAcl(endPointId, aclRuleSet);
+        final var configRuleTypeAcl = new ConfigRuleTypeAcl(configRuleAcl);
+
+        final var expectedConfigRule = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeAcl);
+
+        final var serializedConfigRuleAcl =
+                ContextOuterClass.ConfigRule_ACL.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setRuleSet(serializedAclRuleSet)
+                        .build();
+
+        final var serializedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setAcl(serializedConfigRuleAcl)
+                        .build();
+
+        final var configRule = serializer.deserialize(serializedConfigRule);
+
+        assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldSerializeConfigRuleOfTypeConfigRuleCustom() {
+        final var expectedSerializedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKey")
+                        .setResourceValue("resourceValue")
+                        .build();
+
+        final var configRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+
+        final var expectedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedSerializedConfigRuleCustom)
+                        .build();
+
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(configRuleCustom);
+        final var configRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom);
+        final var serializedConfigRule = serializer.serialize(configRule);
+
+        assertThat(serializedConfigRule).isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldDeserializeConfigRuleOfTypeConfigRuleCustom() {
+        final var serializedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKey")
+                        .setResourceValue("resourceValue")
+                        .build();
+
+        final var expectedConfigRuleCustom = new ConfigRuleCustom("resourceKey", "resourceValue");
+        final var configRuleTypeCustom = new ConfigRuleTypeCustom(expectedConfigRuleCustom);
+        final var expectedConfigRule = new ConfigRule(ConfigActionEnum.SET, configRuleTypeCustom);
+
+        final var serializedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(serializedConfigRuleCustom)
+                        .build();
+
+        final var configRule = serializer.deserialize(serializedConfigRule);
+
+        assertThat(configRule).usingRecursiveComparison().isEqualTo(expectedConfigRule);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConfigRule() {
+        final var serializedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedConfigRule));
+    }
+
+    @Test
+    void shouldSerializeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+
+        final var constraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+
+        final var expectedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var serializedConstraintCustom = serializer.serialize(constraintCustom);
+
+        assertThat(serializedConstraintCustom)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintCustom);
+    }
+
+    @Test
+    void shouldDeserializeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+        final var expectedConstraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+
+        final var serializedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var constraintCustom = serializer.deserialize(serializedConstraintCustom);
+
+        assertThat(constraintCustom).usingRecursiveComparison().isEqualTo(expectedConstraintCustom);
+    }
+
+    @Test
+    void shouldSerializeConstraintSchedule() {
+        final var expectedStartTimestamp = 10;
+        final var expectedDurationDays = 2.2f;
+
+        final var constraintSchedule =
+                new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays);
+
+        final var expectedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(expectedStartTimestamp)
+                        .setDurationDays(expectedDurationDays)
+                        .build();
+
+        final var serializedConstraintSchedule = serializer.serialize(constraintSchedule);
+
+        assertThat(serializedConstraintSchedule)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSchedule);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSchedule() {
+        final var expectedStartTimestamp = 10;
+        final var expectedDurationDays = 2.2f;
+
+        final var expectedConstraintSchedule =
+                new ConstraintSchedule(expectedStartTimestamp, expectedDurationDays);
+
+        final var serializedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(expectedStartTimestamp)
+                        .setDurationDays(expectedDurationDays)
+                        .build();
+
+        final var constraintSchedule = serializer.deserialize(serializedConstraintSchedule);
+
+        assertThat(constraintSchedule).usingRecursiveComparison().isEqualTo(expectedConstraintSchedule);
+    }
+
+    @Test
+    void shouldSerializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var location = new Location(locationTypeRegion);
+
+        final var expectedLocation = ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeRegion() {
+        final var region = "Tokyo";
+
+        final var locationTypeRegion = new LocationTypeRegion(region);
+        final var expectedLocation = new Location(locationTypeRegion);
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setRegion(region).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldSerializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var location = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var expectedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var serializedLocation = serializer.serialize(location);
+
+        assertThat(serializedLocation).isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldDeserializeLocationOfTypeGpsPosition() {
+        final var latitude = 33.3f;
+        final var longitude = 86.4f;
+
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+        final var locationTypeGpsPosition = new LocationTypeGpsPosition(gpsPosition);
+        final var expectedLocation = new Location(locationTypeGpsPosition);
+
+        final var serializedGpsPosition =
+                ContextOuterClass.GPS_Position.newBuilder()
+                        .setLatitude(latitude)
+                        .setLongitude(longitude)
+                        .build();
+
+        final var serializedLocation =
+                ContextOuterClass.Location.newBuilder().setGpsPosition(serializedGpsPosition).build();
+
+        final var location = serializer.deserialize(serializedLocation);
+
+        assertThat(location).usingRecursiveComparison().isEqualTo(expectedLocation);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedLocation() {
+        final var serializedLocation = ContextOuterClass.Location.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedLocation));
+    }
+
+    private static Stream<Arguments> provideIsolationLevelEnum() {
+        return Stream.of(
+                Arguments.of(
+                        IsolationLevelEnum.NO_ISOLATION, ContextOuterClass.IsolationLevelEnum.NO_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PHYSICAL_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PHYSICAL_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.LOGICAL_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.LOGICAL_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PROCESS_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PROCESS_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PHYSICAL_MEMORY_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.PHYSICAL_NETWORK_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.VIRTUAL_RESOURCE_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION),
+                Arguments.of(
+                        IsolationLevelEnum.SERVICE_ISOLATION,
+                        ContextOuterClass.IsolationLevelEnum.SERVICE_ISOLATION));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideIsolationLevelEnum")
+    void shouldSerializeIsolationLevelEnum(
+            IsolationLevelEnum isolationLevelEnum,
+            ContextOuterClass.IsolationLevelEnum expectedIsolationLevelEnum) {
+        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+
+        assertThat(serializedIsolationLevelEnum.getNumber())
+                .isEqualTo(expectedIsolationLevelEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideIsolationLevelEnum")
+    void shouldDeserializeIsolationLevelEnum(
+            IsolationLevelEnum expectedIsolationLevelEnum,
+            ContextOuterClass.IsolationLevelEnum serializedIsolationLevelEnum) {
+        final var isolationLevelEnum = serializer.deserialize(serializedIsolationLevelEnum);
+
+        assertThat(isolationLevelEnum).isEqualTo(expectedIsolationLevelEnum);
+    }
+
+    @Test
+    void shouldSerializeConstraintEndPointLocation() {
+        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 locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var expectedConstraintEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var serializedConstraintEndPointLocation =
+                serializer.serialize(constraintEndPointLocation);
+
+        assertThat(serializedConstraintEndPointLocation)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintEndPointLocation);
+    }
+
+    @Test
+    void shouldDeserializeConstraintEndPointLocation() {
+        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 latitude = 54.6f;
+        final var longitude = 123.7f;
+        final var gpsPosition = new GpsPosition(latitude, longitude);
+
+        final var locationType = new LocationTypeGpsPosition(gpsPosition);
+        final var location = new Location(locationType);
+
+        final var expectedConstraintEndPointLocation =
+                new ConstraintEndPointLocation(endPointId, location);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var serializedConstraintEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var constraintEndPointLocation =
+                serializer.deserialize(serializedConstraintEndPointLocation);
+
+        assertThat(constraintEndPointLocation)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintEndPointLocation);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaAvailability() {
+        final var numDisJointPaths = 2;
+        final var isAllActive = true;
+
+        final var constraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisJointPaths, isAllActive);
+
+        final var expectedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisJointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var serializedConstraintSlaAvailability = serializer.serialize(constraintSlaAvailability);
+
+        assertThat(serializedConstraintSlaAvailability)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaAvailability);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaAvailability() {
+        final var numDisJointPaths = 2;
+        final var isAllActive = true;
+
+        final var expectedConstraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisJointPaths, isAllActive);
+
+        final var serializedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisJointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var constraintSlaAvailability =
+                serializer.deserialize(serializedConstraintSlaAvailability);
+
+        assertThat(constraintSlaAvailability)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaAvailability);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaCapacity() {
+        final var capacityGbps = 5;
+
+        final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+
+        final var expectedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var serializedConstraintSlaCapacity = serializer.serialize(constraintSlaCapacity);
+
+        assertThat(serializedConstraintSlaCapacity)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaCapacity);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaCapacity() {
+        final var capacityGbps = 5;
+
+        final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+
+        final var serializedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var constraintSlaCapacity = serializer.deserialize(serializedConstraintSlaCapacity);
+
+        assertThat(constraintSlaCapacity)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaCapacity);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnum = IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+
+        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnum);
+
+        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+        final var expectedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .build();
+
+        final var serializedConstraintSlaIsolationLevel =
+                serializer.serialize(constraintSlaIsolationLevel);
+
+        assertThat(serializedConstraintSlaIsolationLevel)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaIsolationLevel);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnum = IsolationLevelEnum.NETWORK_FUNCTIONS_ISOLATION;
+
+        final var expectedConstraintSlaIsolationLevel =
+                new ConstraintSlaIsolationLevel(isolationLevelEnum);
+
+        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+        final var serializedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .build();
+
+        final var constraintSlaIsolationLevel =
+                serializer.deserialize(serializedConstraintSlaIsolationLevel);
+
+        assertThat(constraintSlaIsolationLevel)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaIsolationLevel);
+    }
+
+    @Test
+    void shouldSerializeConstraintSlaLatency() {
+        final var e2eLatencyMs = 5.7f;
+
+        final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+
+        final var expectedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var serializedConstraintSlaLatency = serializer.serialize(constraintSlaLatency);
+
+        assertThat(serializedConstraintSlaLatency)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaLatency);
+    }
+
+    @Test
+    void shouldDeserializeConstraintSlaLatency() {
+        final var e2eLatencyMs = 5.7f;
+
+        final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+
+        final var serializedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var constraintSlaLatency = serializer.deserialize(serializedConstraintSlaLatency);
+
+        assertThat(constraintSlaLatency)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedConstraintSlaLatency);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+
+        final var constraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+        final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+        final var constraint = new Constraint(constraintTypeCustom);
+
+        final var expectedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setCustom(expectedConstraintCustom).build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintCustom() {
+        final var expectedConstraintType = "constraintType";
+        final var expectedConstraintValue = "constraintValue";
+
+        final var constraintCustom =
+                new ConstraintCustom(expectedConstraintType, expectedConstraintValue);
+        final var constraintTypeCustom = new ConstraintTypeCustom(constraintCustom);
+        final var expectedConstraint = new Constraint(constraintTypeCustom);
+
+        final var serializedConstraintCustom =
+                ContextOuterClass.Constraint_Custom.newBuilder()
+                        .setConstraintType(expectedConstraintType)
+                        .setConstraintValue(expectedConstraintValue)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setCustom(serializedConstraintCustom).build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSchedule() {
+        final var startTimeSTamp = 2.2f;
+        final var durationDays = 5.73f;
+
+        final var constraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays);
+        final var constraintTypeSchedule = new ConstraintTypeSchedule(constraintSchedule);
+        final var constraint = new Constraint(constraintTypeSchedule);
+
+        final var expectedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(startTimeSTamp)
+                        .setDurationDays(durationDays)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setSchedule(expectedConstraintSchedule).build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSchedule() {
+        final var startTimeSTamp = 2.2f;
+        final var durationDays = 5.73f;
+
+        final var expectedConstraintSchedule = new ConstraintSchedule(startTimeSTamp, durationDays);
+        final var expectedConstraintTypeSchedule =
+                new ConstraintTypeSchedule(expectedConstraintSchedule);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSchedule);
+
+        final var serializedConstraintSchedule =
+                ContextOuterClass.Constraint_Schedule.newBuilder()
+                        .setStartTimestamp(startTimeSTamp)
+                        .setDurationDays(durationDays)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder().setSchedule(serializedConstraintSchedule).build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintEndPointLocation() {
+        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 locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var constraintEndPointLocation = new ConstraintEndPointLocation(endPointId, location);
+        final var constraintTypeEndPointLocation =
+                new ConstraintTypeEndPointLocation(constraintEndPointLocation);
+        final var constraint = new Constraint(constraintTypeEndPointLocation);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var expectedConstraintEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setEndpointLocation(expectedConstraintEndPointLocation)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintEndPointLocation() {
+        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 locationType = new LocationTypeRegion("ATH");
+        final var location = new Location(locationType);
+
+        final var expectedConstraintEndPointLocation =
+                new ConstraintEndPointLocation(endPointId, location);
+        final var expectedConstraintTypeEndPointLocation =
+                new ConstraintTypeEndPointLocation(expectedConstraintEndPointLocation);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeEndPointLocation);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedLocation = serializer.serialize(location);
+
+        final var serializedEndPointLocation =
+                ContextOuterClass.Constraint_EndPointLocation.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setLocation(serializedLocation)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setEndpointLocation(serializedEndPointLocation)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaAvailability() {
+        final var numDisjointPaths = 2;
+        final var isAllActive = true;
+
+        final var constraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+        final var constraintTypeSlaAvailability =
+                new ConstraintTypeSlaAvailability(constraintSlaAvailability);
+        final var constraint = new Constraint(constraintTypeSlaAvailability);
+
+        final var expectedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisjointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaAvailability(expectedConstraintSlaAvailability)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaAvailability() {
+        final var numDisjointPaths = 2;
+        final var isAllActive = true;
+
+        final var expectedConstraintSlaAvailability =
+                new ConstraintSlaAvailability(numDisjointPaths, isAllActive);
+        final var expectedConstraintTypeSlaAvailability =
+                new ConstraintTypeSlaAvailability(expectedConstraintSlaAvailability);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaAvailability);
+
+        final var serializedConstraintSlaAvailability =
+                ContextOuterClass.Constraint_SLA_Availability.newBuilder()
+                        .setNumDisjointPaths(numDisjointPaths)
+                        .setAllActive(isAllActive)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaAvailability(serializedConstraintSlaAvailability)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaCapacity() {
+        final var capacityGbps = 77.3f;
+
+        final var constraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+        final var constraintTypeSlaCapacity = new ConstraintTypeSlaCapacity(constraintSlaCapacity);
+        final var constraint = new Constraint(constraintTypeSlaCapacity);
+
+        final var expectedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaCapacity(expectedConstraintSlaCapacity)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaCapacity() {
+        final var capacityGbps = 77.3f;
+
+        final var expectedConstraintSlaCapacity = new ConstraintSlaCapacity(capacityGbps);
+        final var expectedConstraintTypeSlaCapacity =
+                new ConstraintTypeSlaCapacity(expectedConstraintSlaCapacity);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaCapacity);
+
+        final var serializedConstraintSlaCapacity =
+                ContextOuterClass.Constraint_SLA_Capacity.newBuilder()
+                        .setCapacityGbps(capacityGbps)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaCapacity(serializedConstraintSlaCapacity)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnum = IsolationLevelEnum.PHYSICAL_ISOLATION;
+
+        final var expectedConstraintSlaIsolationLevel =
+                new ConstraintSlaIsolationLevel(isolationLevelEnum);
+        final var expectedConstraintTypeSlaIsolationLevel =
+                new ConstraintTypeSlaIsolationLevel(expectedConstraintSlaIsolationLevel);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaIsolationLevel);
+
+        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+
+        final var serializedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaIsolation(serializedConstraintSlaIsolationLevel)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaIsolationLevel() {
+        final var isolationLevelEnum = IsolationLevelEnum.PHYSICAL_ISOLATION;
+
+        final var constraintSlaIsolationLevel = new ConstraintSlaIsolationLevel(isolationLevelEnum);
+        final var constraintTypeSlaIsolationLevel =
+                new ConstraintTypeSlaIsolationLevel(constraintSlaIsolationLevel);
+        final var constraint = new Constraint(constraintTypeSlaIsolationLevel);
+
+        final var serializedIsolationLevelEnum = serializer.serialize(isolationLevelEnum);
+
+        final var expectedConstraintSlaIsolationLevel =
+                ContextOuterClass.Constraint_SLA_Isolation_level.newBuilder()
+                        .setIsolationLevel(serializedIsolationLevelEnum)
+                        .build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaIsolation(expectedConstraintSlaIsolationLevel)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldSerializeConstraintOfTypeConstraintSlaLatency() {
+        final var e2eLatencyMs = 45.32f;
+
+        final var constraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+        final var constraintTypeSlaLatency = new ConstraintTypeSlaLatency(constraintSlaLatency);
+        final var constraint = new Constraint(constraintTypeSlaLatency);
+
+        final var expectedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var expectedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaLatency(expectedConstraintSlaLatency)
+                        .build();
+
+        final var serializedConstraint = serializer.serialize(constraint);
+
+        assertThat(serializedConstraint).isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldDeserializeConstraintOfTypeConstraintSlaLatency() {
+        final var e2eLatencyMs = 45.32f;
+
+        final var expectedConstraintSlaLatency = new ConstraintSlaLatency(e2eLatencyMs);
+        final var expectedConstraintTypeSlaLatency =
+                new ConstraintTypeSlaLatency(expectedConstraintSlaLatency);
+        final var expectedConstraint = new Constraint(expectedConstraintTypeSlaLatency);
+
+        final var serializedConstraintSlaLatency =
+                ContextOuterClass.Constraint_SLA_Latency.newBuilder().setE2ELatencyMs(e2eLatencyMs).build();
+
+        final var serializedConstraint =
+                ContextOuterClass.Constraint.newBuilder()
+                        .setSlaLatency(serializedConstraintSlaLatency)
+                        .build();
+
+        final var constraint = serializer.deserialize(serializedConstraint);
+
+        assertThat(constraint).usingRecursiveComparison().isEqualTo(expectedConstraint);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedConstraint() {
+        final var serializedKpiValue = ContextOuterClass.Constraint.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedKpiValue));
+    }
+
+    @Test
+    void shouldSerializeEndPointId() {
+        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 serializedTopologyId = serializer.serialize(expectedTopologyId);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedEndPointId =
+                ContextOuterClass.EndPointId.newBuilder()
+                        .setTopologyId(serializedTopologyId)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointUuid(serializedEndPointUuid)
+                        .build();
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+
+        assertThat(serializedEndPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    @Test
+    void shouldDeserializeEndPointId() {
+        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 serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var endPointId = serializer.deserialize(serializedEndPointId);
+
+        assertThat(endPointId).usingRecursiveComparison().isEqualTo(expectedEndPointId);
+    }
+
+    private static Stream<Arguments> provideEventTypeEnum() {
+        return Stream.of(
+                Arguments.of(EventTypeEnum.CREATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE),
+                Arguments.of(EventTypeEnum.REMOVE, ContextOuterClass.EventTypeEnum.EVENTTYPE_REMOVE),
+                Arguments.of(EventTypeEnum.UNDEFINED, ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED),
+                Arguments.of(EventTypeEnum.UPDATE, ContextOuterClass.EventTypeEnum.EVENTTYPE_UPDATE));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideEventTypeEnum")
+    void shouldSerializeEventType(
+            EventTypeEnum eventType, ContextOuterClass.EventTypeEnum expectedSerializedType) {
+        final var serializedType = serializer.serialize(eventType);
+
+        assertThat(serializedType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideEventTypeEnum")
+    void shouldDeserializeEventType(
+            EventTypeEnum expectedEventType, ContextOuterClass.EventTypeEnum serializedEventType) {
+        final var eventType = serializer.deserialize(serializedEventType);
+
+        assertThat(eventType).isEqualTo(expectedEventType);
+    }
+
+    @Test
+    void shouldSerializeEvent() {
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
+        final var expectedEvent =
+                ContextOuterClass.Event.newBuilder()
+                        .setTimestamp(timestamp)
+                        .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
+                        .build();
+
+        final var event = new Event(1, EventTypeEnum.CREATE);
+        final var serializedEvent = serializer.serialize(event);
+
+        assertThat(serializedEvent).usingRecursiveComparison().isEqualTo(expectedEvent);
+    }
+
+    @Test
+    void shouldDeserializeEvent() {
+        final var expectedEvent = new Event(1, EventTypeEnum.CREATE);
+        final var timestamp = ContextOuterClass.Timestamp.newBuilder().setTimestamp(1).build();
+
+        final var serializedEvent =
+                ContextOuterClass.Event.newBuilder()
+                        .setTimestamp(timestamp)
+                        .setEventType(ContextOuterClass.EventTypeEnum.EVENTTYPE_CREATE)
+                        .build();
+        final var event = serializer.deserialize(serializedEvent);
+
+        assertThat(event).usingRecursiveComparison().isEqualTo(expectedEvent);
+    }
+
+    @Test
+    void shouldSerializeServiceId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+        final var serviceId = new ServiceId(expectedContextId, expectedId);
+
+        final var serializedContextId = serializer.serializeContextId(expectedContextId);
+        final var serializedIdUuid = serializer.serializeUuid(expectedId);
+
+        final var expectedServiceId =
+                ContextOuterClass.ServiceId.newBuilder()
+                        .setContextId(serializedContextId)
+                        .setServiceUuid(serializedIdUuid)
+                        .build();
+
+        final var serializedServiceId = serializer.serialize(serviceId);
+
+        assertThat(serializedServiceId).usingRecursiveComparison().isEqualTo(expectedServiceId);
+    }
+
+    @Test
+    void shouldDeserializeServiceId() {
+        final var expectedContextId = "expectedContextId";
+        final var expectedId = "expectedId";
+
+        final var expectedServiceId = new ServiceId(expectedContextId, expectedId);
+
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+
+        final var serviceId = serializer.deserialize(serializedServiceId);
+
+        assertThat(serviceId).usingRecursiveComparison().isEqualTo(expectedServiceId);
+    }
+
+    private static Stream<Arguments> provideServiceStatusEnum() {
+        return Stream.of(
+                Arguments.of(
+                        ServiceStatusEnum.ACTIVE, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_ACTIVE),
+                Arguments.of(
+                        ServiceStatusEnum.PLANNED, ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PLANNED),
+                Arguments.of(
+                        ServiceStatusEnum.PENDING_REMOVAL,
+                        ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_PENDING_REMOVAL),
+                Arguments.of(
+                        ServiceStatusEnum.UNDEFINED,
+                        ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceStatusEnum")
+    void shouldSerializeServiceStatusEnum(
+            ServiceStatusEnum serviceStatusEnum,
+            ContextOuterClass.ServiceStatusEnum expectedSerializedType) {
+        final var serializedServiceStatusEnum = serializer.serialize(serviceStatusEnum);
+
+        assertThat(serializedServiceStatusEnum.getNumber())
+                .isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceStatusEnum")
+    void shouldDeserializeServiceStatusEnum(
+            ServiceStatusEnum expectedServiceStatusEnum,
+            ContextOuterClass.ServiceStatusEnum serializedServiceStatusEnum) {
+        final var serviceStatusEnum = serializer.deserialize(serializedServiceStatusEnum);
+
+        assertThat(serviceStatusEnum).isEqualTo(expectedServiceStatusEnum);
+    }
+
+    private static Stream<Arguments> provideServiceTypeEnum() {
+        return Stream.of(
+                Arguments.of(ServiceTypeEnum.L2NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L2NM),
+                Arguments.of(ServiceTypeEnum.L3NM, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_L3NM),
+                Arguments.of(
+                        ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE,
+                        ContextOuterClass.ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE),
+                Arguments.of(
+                        ServiceTypeEnum.UNKNOWN, ContextOuterClass.ServiceTypeEnum.SERVICETYPE_UNKNOWN));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceTypeEnum")
+    void shouldSerializeServiceTypeEnum(
+            ServiceTypeEnum serviceTypeEnum, ContextOuterClass.ServiceTypeEnum expectedSerializedType) {
+        final var serializedServiceTypeEnum = serializer.serialize(serviceTypeEnum);
+
+        assertThat(serializedServiceTypeEnum.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideServiceTypeEnum")
+    void shouldDeserializeServiceTypeEnum(
+            ServiceTypeEnum expectedServiceTypeEnum,
+            ContextOuterClass.ServiceTypeEnum serializedServiceTypeEnum) {
+        final var serviceTypeEnum = serializer.deserialize(serializedServiceTypeEnum);
+
+        assertThat(serviceTypeEnum).isEqualTo(expectedServiceTypeEnum);
+    }
+
+    @Test
+    void shouldSerializeServiceStatus() {
+        final var expectedServiceStatusEnum = ServiceStatusEnum.ACTIVE;
+        final var serviceStatus = new ServiceStatus(expectedServiceStatusEnum);
+
+        final var serializedServiceStatusEnum = serializer.serialize(expectedServiceStatusEnum);
+
+        final var expectedServiceStatus =
+                ContextOuterClass.ServiceStatus.newBuilder()
+                        .setServiceStatus(serializedServiceStatusEnum)
+                        .build();
+
+        final var serializedServiceStatus = serializer.serialize(serviceStatus);
+
+        assertThat(serializedServiceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus);
+    }
+
+    @Test
+    void shouldDeserializeServiceStatus() {
+        final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PENDING_REMOVAL);
+
+        final var serializedServiceStatus = serializer.serialize(expectedServiceStatus);
+        final var serviceStatus = serializer.deserialize(serializedServiceStatus);
+
+        assertThat(serviceStatus).usingRecursiveComparison().isEqualTo(expectedServiceStatus);
+    }
+
+    @Test
+    void shouldSerializeServiceConfig() {
+        final var configRuleA = createConfigRule();
+        final var configRuleB = createConfigRule();
+        final var serviceConfig = new ServiceConfig(List.of(configRuleA, configRuleB));
+
+        final var expectedConfigRuleA = serializer.serialize(configRuleA);
+        final var expectedConfigRuleB = serializer.serialize(configRuleB);
+
+        final var expectedServiceConfig =
+                ContextOuterClass.ServiceConfig.newBuilder()
+                        .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB))
+                        .build();
+
+        final var serializedServiceConfig = serializer.serialize(serviceConfig);
+
+        assertThat(serializedServiceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig);
+    }
+
+    @Test
+    void shouldDeserializeServiceConfig() {
+        final var expectedConfigRuleA = createConfigRule();
+        final var expectedConfigRuleB = createConfigRule();
+        final var expectedServiceConfig =
+                new ServiceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB));
+
+        final var configRuleA = serializer.serialize(expectedConfigRuleA);
+        final var configRuleB = serializer.serialize(expectedConfigRuleB);
+        final var serializedServiceConfig =
+                ContextOuterClass.ServiceConfig.newBuilder()
+                        .addAllConfigRules(List.of(configRuleA, configRuleB))
+                        .build();
+
+        final var serviceConfig = serializer.deserialize(serializedServiceConfig);
+
+        assertThat(serviceConfig).usingRecursiveComparison().isEqualTo(expectedServiceConfig);
+    }
+
+    @Test
+    void shouldSerializeService() {
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE;
+        final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId");
+        final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId");
+
+        final var firstExpectedEndPointId =
+                new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var secondExpectedEndPointId =
+                new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var expectedServiceEndPointIds =
+                List.of(firstExpectedEndPointId, secondExpectedEndPointId);
+
+        final var expectedConstraintTypeA = "constraintTypeA";
+        final var expectedConstraintValueA = "constraintValueA";
+
+        final var constraintCustomA =
+                new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA);
+        final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA);
+        final var firstExpectedConstraint = new Constraint(constraintTypeCustomA);
+
+        final var expectedConstraintTypeB = "constraintTypeB";
+        final var expectedConstraintValueB = "constraintValueB";
+
+        final var constraintCustomB =
+                new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB);
+        final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB);
+        final var secondExpectedConstraint = new Constraint(constraintTypeCustomB);
+
+        final var expectedServiceConstraints =
+                List.of(firstExpectedConstraint, secondExpectedConstraint);
+
+        final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED);
+
+        final var expectedConfigRuleA = createConfigRule();
+        final var expectedConfigRuleB = createConfigRule();
+
+        final var expectedConfigRules = List.of(expectedConfigRuleA, expectedConfigRuleB);
+
+        final var expectedServiceConfig = new ServiceConfig(expectedConfigRules);
+
+        final var expectedTimestamp = 2.3;
+
+        final var service =
+                new Service(
+                        expectedServiceId,
+                        expectedServiceTypeEnum,
+                        expectedServiceEndPointIds,
+                        expectedServiceConstraints,
+                        expectedServiceStatus,
+                        expectedServiceConfig,
+                        expectedTimestamp);
+
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum);
+        final var serializedServiceEndPointIds =
+                expectedServiceEndPointIds.stream()
+                        .map(endPointId -> serializer.serialize(endPointId))
+                        .collect(Collectors.toList());
+        final var serializedServiceConstraints =
+                expectedServiceConstraints.stream()
+                        .map(constraint -> serializer.serialize(constraint))
+                        .collect(Collectors.toList());
+        final var serializedServiceStatus = serializer.serialize(expectedServiceStatus);
+        final var serializedServiceConfig = serializer.serialize(expectedServiceConfig);
+        final var serializedTimestamp = serializer.serialize(expectedTimestamp);
+
+        final var expectedService =
+                ContextOuterClass.Service.newBuilder()
+                        .setServiceId(serializedServiceId)
+                        .setServiceType(serializedServiceType)
+                        .addAllServiceEndpointIds(serializedServiceEndPointIds)
+                        .addAllServiceConstraints(serializedServiceConstraints)
+                        .setServiceStatus(serializedServiceStatus)
+                        .setServiceConfig(serializedServiceConfig)
+                        .setTimestamp(serializedTimestamp)
+                        .build();
+
+        final var serializedService = serializer.serialize(service);
+
+        assertThat(serializedService).isEqualTo(expectedService);
+    }
+
+    @Test
+    void shouldDeserializeService() {
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedServiceTypeEnum = ServiceTypeEnum.TAPI_CONNECTIVITY_SERVICE;
+        final var firstExpectedTopologyId = new TopologyId("contextId", "firstTopologyId");
+        final var secondExpectedTopologyId = new TopologyId("contextId", "secondTopologyId");
+
+        final var firstExpectedEndPointId =
+                new EndPointId(firstExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var secondExpectedEndPointId =
+                new EndPointId(secondExpectedTopologyId, "firstDeviceId", "firstEndPointId");
+        final var expectedServiceEndPointIds =
+                List.of(firstExpectedEndPointId, secondExpectedEndPointId);
+
+        final var expectedConstraintTypeA = "constraintTypeA";
+        final var expectedConstraintValueA = "constraintValueA";
+
+        final var constraintCustomA =
+                new ConstraintCustom(expectedConstraintTypeA, expectedConstraintValueA);
+        final var constraintTypeCustomA = new ConstraintTypeCustom(constraintCustomA);
+        final var firstExpectedConstraint = new Constraint(constraintTypeCustomA);
+
+        final var expectedConstraintTypeB = "constraintTypeB";
+        final var expectedConstraintValueB = "constraintValueB";
+
+        final var constraintCustomB =
+                new ConstraintCustom(expectedConstraintTypeB, expectedConstraintValueB);
+        final var constraintTypeCustomB = new ConstraintTypeCustom(constraintCustomB);
+        final var secondExpectedConstraint = new Constraint(constraintTypeCustomB);
+
+        final var expectedServiceConstraints =
+                List.of(firstExpectedConstraint, secondExpectedConstraint);
+
+        final var expectedServiceStatus = new ServiceStatus(ServiceStatusEnum.PLANNED);
+
+        final var firstExpectedConfigRuleA = createConfigRule();
+        final var secondExpectedConfigRuleB = createConfigRule();
+
+        final var expectedConfigRules = List.of(firstExpectedConfigRuleA, secondExpectedConfigRuleB);
+
+        final var expectedServiceConfig = new ServiceConfig(expectedConfigRules);
+
+        final var expectedTimestamp = 7.8;
+
+        final var expectedService =
+                new Service(
+                        expectedServiceId,
+                        expectedServiceTypeEnum,
+                        expectedServiceEndPointIds,
+                        expectedServiceConstraints,
+                        expectedServiceStatus,
+                        expectedServiceConfig,
+                        expectedTimestamp);
+
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedServiceType = serializer.serialize(expectedServiceTypeEnum);
+        final var serializedServiceEndPointIds =
+                expectedServiceEndPointIds.stream()
+                        .map(endPointId -> serializer.serialize(endPointId))
+                        .collect(Collectors.toList());
+        final var serializedServiceConstraints =
+                expectedServiceConstraints.stream()
+                        .map(constraint -> serializer.serialize(constraint))
+                        .collect(Collectors.toList());
+        final var serializedServiceStatus = serializer.serialize(expectedServiceStatus);
+        final var serializedServiceConfig = serializer.serialize(expectedServiceConfig);
+        final var serializedTimestamp = serializer.serialize(expectedTimestamp);
+
+        final var serializedService =
+                ContextOuterClass.Service.newBuilder()
+                        .setServiceId(serializedServiceId)
+                        .setServiceType(serializedServiceType)
+                        .addAllServiceEndpointIds(serializedServiceEndPointIds)
+                        .addAllServiceConstraints(serializedServiceConstraints)
+                        .setServiceStatus(serializedServiceStatus)
+                        .setServiceConfig(serializedServiceConfig)
+                        .setTimestamp(serializedTimestamp)
+                        .build();
+
+        final var service = serializer.deserialize(serializedService);
+
+        assertThat(service).usingRecursiveComparison().isEqualTo(expectedService);
+    }
+
+    private static Stream<Arguments> provideKpiSampleType() {
+        return Stream.of(
+                Arguments.of(
+                        KpiSampleType.PACKETS_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.PACKETS_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_PACKETS_RECEIVED),
+                Arguments.of(
+                        KpiSampleType.BYTES_TRANSMITTED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_TRANSMITTED),
+                Arguments.of(
+                        KpiSampleType.BYTES_RECEIVED,
+                        KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_BYTES_RECEIVED),
+                Arguments.of(KpiSampleType.UNKNOWN, KpiSampleTypes.KpiSampleType.KPISAMPLETYPE_UNKNOWN));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldSerializeKpiSampleType(
+            KpiSampleType kpiSampleType, KpiSampleTypes.KpiSampleType expectedSerializedType) {
+        final var serializedKpiSampleType = serializer.serialize(kpiSampleType);
+
+        assertThat(serializedKpiSampleType.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiSampleType")
+    void shouldDeserializeKpiSampleType(
+            KpiSampleType expectedKpiSampleType, KpiSampleTypes.KpiSampleType serializedKpiSampleType) {
+        final var kpiSampleType = serializer.deserialize(serializedKpiSampleType);
+
+        assertThat(kpiSampleType).isEqualTo(expectedKpiSampleType);
+    }
+
+    private static Stream<Arguments> provideRuleState() {
+        return Stream.of(
+                Arguments.of(RuleState.POLICY_UNDEFINED, Policy.RuleState.POLICY_UNDEFINED),
+                Arguments.of(RuleState.POLICY_FAILED, Policy.RuleState.POLICY_FAILED),
+                Arguments.of(RuleState.POLICY_INSERTED, Policy.RuleState.POLICY_INSERTED),
+                Arguments.of(RuleState.POLICY_VALIDATED, Policy.RuleState.POLICY_VALIDATED),
+                Arguments.of(RuleState.POLICY_PROVISIONED, Policy.RuleState.POLICY_PROVISIONED),
+                Arguments.of(RuleState.POLICY_ACTIVE, Policy.RuleState.POLICY_ACTIVE),
+                Arguments.of(RuleState.POLICY_ENFORCED, Policy.RuleState.POLICY_ENFORCED),
+                Arguments.of(RuleState.POLICY_INEFFECTIVE, Policy.RuleState.POLICY_INEFFECTIVE),
+                Arguments.of(RuleState.POLICY_EFFECTIVE, Policy.RuleState.POLICY_EFFECTIVE),
+                Arguments.of(RuleState.POLICY_UPDATED, Policy.RuleState.POLICY_UPDATED),
+                Arguments.of(RuleState.POLICY_REMOVED, Policy.RuleState.POLICY_REMOVED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideRuleState")
+    void shouldSerializeRuleState(RuleState ruleState, Policy.RuleState expectedSerializedType) {
+        final var serializedRuleState = serializer.serialize(ruleState);
+
+        assertThat(serializedRuleState.getNumber()).isEqualTo(expectedSerializedType.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideRuleState")
+    void shouldDeserializeRuleState(
+            RuleState expectedRuleState, Policy.RuleState serializedRuleState) {
+        final var ruleState = serializer.deserialize(serializedRuleState);
+
+        assertThat(ruleState).isEqualTo(expectedRuleState);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleState() {
+        final var expectedRuleState = RuleState.POLICY_ACTIVE;
+        final var policyRuleState = new PolicyRuleState(expectedRuleState);
+
+        final var serializedRuleState = serializer.serialize(expectedRuleState);
+
+        final var expectedPolicyRuleState =
+                Policy.PolicyRuleState.newBuilder().setPolicyRuleState(serializedRuleState).build();
+
+        final var serializedPolicyRuleState = serializer.serialize(policyRuleState);
+
+        assertThat(serializedPolicyRuleState)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleState);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleState() {
+        final var expectedRuleState = RuleState.POLICY_ENFORCED;
+        final var expectedPolicyRuleState = new PolicyRuleState(expectedRuleState);
+
+        final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
+
+        final var policyRuleState = serializer.deserialize(serializedPolicyRuleState);
+
+        assertThat(policyRuleState).usingRecursiveComparison().isEqualTo(expectedPolicyRuleState);
+    }
+
+    private static Stream<Arguments> provideNumericalOperator() {
+        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),
+                Arguments.of(
+                        NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_UNDEFINED,
+                        PolicyCondition.NumericalOperator.POLICYRULE_CONDITION_NUMERICAL_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideNumericalOperator")
+    void shouldSerializeNumericalOperator(
+            NumericalOperator numericalOperator,
+            PolicyCondition.NumericalOperator expectedNumericalOperator) {
+        final var serializedNumericalOperator = serializer.serialize(numericalOperator);
+
+        assertThat(serializedNumericalOperator).isEqualTo(expectedNumericalOperator);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideNumericalOperator")
+    void shouldDeserializeNumericalOperator(
+            NumericalOperator expectedNumericalOperator,
+            PolicyCondition.NumericalOperator serializedNumericalOperator) {
+        final var numericalOperator = serializer.deserialize(serializedNumericalOperator);
+
+        assertThat(numericalOperator).isEqualTo(expectedNumericalOperator);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideNumericalOperator")
+    void shouldSerializePolicyRuleConditionGivenMultipleNumericalOperators(
+            NumericalOperator expectedNumericalOperator) {
+        final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId";
+        final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34);
+
+        final var policyRuleCondition =
+                new PolicyRuleCondition(
+                        expectedPolicyRuleConditionKpiId,
+                        expectedNumericalOperator,
+                        expectedPolicyRuleConditionKpiValue);
+
+        final var serializedPolicyRuleConditionKpiIdUuid =
+                serializer.serializeUuid(expectedPolicyRuleConditionKpiId);
+        final var serializedPolicyRuleConditionKpiId =
+                KpiId.newBuilder().setKpiId(serializedPolicyRuleConditionKpiIdUuid).build();
+        final var serializedNumericalOperator = serializer.serialize(expectedNumericalOperator);
+        final var serializedPolicyRuleConditionKpiValue =
+                serializer.serializeIntegerKpiValue(expectedPolicyRuleConditionKpiValue);
+
+        final var expectedPolicyRuleCondition =
+                PolicyCondition.PolicyRuleCondition.newBuilder()
+                        .setKpiId(serializedPolicyRuleConditionKpiId)
+                        .setNumericalOperator(serializedNumericalOperator)
+                        .setKpiValue(serializedPolicyRuleConditionKpiValue)
+                        .build();
+
+        final var serializedPolicyRuleCondition = serializer.serialize(policyRuleCondition);
+
+        assertThat(serializedPolicyRuleCondition)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleCondition);
+    }
+
+    private static Stream<Arguments> provideKpiValues() {
+        return Stream.of(
+                Arguments.of(
+                        new StringKpiValue("stringKpiValue"),
+                        Monitoring.KpiValue.newBuilder().setStringVal("stringKpiValue").build()),
+                Arguments.of(
+                        new BooleanKpiValue(true), Monitoring.KpiValue.newBuilder().setBoolVal(true).build()),
+                Arguments.of(
+                        new IntegerKpiValue(44), Monitoring.KpiValue.newBuilder().setIntVal(44).build()),
+                Arguments.of(
+                        new FloatKpiValue(12.3f), Monitoring.KpiValue.newBuilder().setFloatVal(12.3f).build()));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldSerializeKpiValues(KpiValue kpiValue, Monitoring.KpiValue expectedKpiValue) {
+        final var serializedKpiValue = serializer.serialize(kpiValue);
+
+        assertThat(serializedKpiValue).isEqualTo(expectedKpiValue);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValues")
+    void shouldDeserializeKpiValues(
+            KpiValue expectedKpiValue, Monitoring.KpiValue serializedKpiValue) {
+        final var kpiValue = serializer.deserialize(serializedKpiValue);
+
+        assertThat(kpiValue).usingRecursiveComparison().isEqualTo(expectedKpiValue);
+    }
+
+    @Test
+    void shouldThrowIllegalStateExceptionDuringDeserializationOfNonSpecifiedKpiValue() {
+        final var serializedKpiValue = Monitoring.KpiValue.newBuilder().build();
+
+        assertThatExceptionOfType(IllegalStateException.class)
+                .isThrownBy(() -> serializer.deserialize(serializedKpiValue));
+    }
+
+    @Test
+    void shouldDeserializeIntegerKpiValue() {
+        final var expectedKpiValue = new IntegerKpiValue(66);
+
+        final var intValue = serializer.serializeIntegerKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeIntegerKpiValue(intValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    @Test
+    void shouldDeserializeStringKpiValue() {
+        final var expectedKpiValue = new StringKpiValue("StringKpiValue");
+
+        final var stringValue = serializer.serializeStringKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeStringKpiValue(stringValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    @Test
+    void shouldDeserializeFloatKpiValue() {
+        final var expectedKpiValue = new FloatKpiValue(2.2f);
+
+        final var floatValue = serializer.serializeFloatKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeFloatKpiValue(floatValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    @Test
+    void shouldDeserializeBooleanKpiValue() {
+        final var expectedKpiValue = new BooleanKpiValue(true);
+
+        final var booleanValue = serializer.serializeBooleanKpiValue(expectedKpiValue);
+        final var deserializedKpiValue = serializer.deserializeBooleanKpiValue(booleanValue);
+
+        assertThat(deserializedKpiValue).isEqualTo(expectedKpiValue.getValue());
+    }
+
+    private static Stream<Arguments> provideKpiValueRanges() {
+        return Stream.of(
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new IntegerKpiValue(32), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setIntVal(32).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new FloatKpiValue(56.2f), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setFloatVal(56.2f).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(true), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(false), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(true), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new BooleanKpiValue(false), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setBoolVal(false).build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new IntegerKpiValue(42)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setIntVal(42).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new FloatKpiValue(42.2f)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setFloatVal(42.2f).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new BooleanKpiValue(true)),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setBoolVal(true).build())
+                                .build()),
+                Arguments.of(
+                        new KpiValueRange(new StringKpiValue("string"), new StringKpiValue("string")),
+                        Monitoring.KpiValueRange.newBuilder()
+                                .setKpiMinValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .setKpiMaxValue(Monitoring.KpiValue.newBuilder().setStringVal("string").build())
+                                .build()));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValueRanges")
+    void shouldSerializeKpiValueRange(
+            KpiValueRange kpiValueRange, Monitoring.KpiValueRange expectedKpiValueRange) {
+        final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
+
+        assertThat(serializedKpiValueRange.getKpiMinValue())
+                .isEqualTo(expectedKpiValueRange.getKpiMinValue());
+        assertThat(serializedKpiValueRange.getKpiMaxValue())
+                .isEqualTo(expectedKpiValueRange.getKpiMaxValue());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideKpiValueRanges")
+    void shouldDeserializeKpiValueRange(
+            KpiValueRange expectedKpiValueRange, Monitoring.KpiValueRange serializedKpiValueRange) {
+        final var kpiValueRange = serializer.deserialize(serializedKpiValueRange);
+
+        assertThat(kpiValueRange.getKpiMinValue())
+                .usingRecursiveComparison()
+                .isEqualTo(expectedKpiValueRange.getKpiMinValue());
+        assertThat(kpiValueRange.getKpiMaxValue())
+                .usingRecursiveComparison()
+                .isEqualTo(expectedKpiValueRange.getKpiMaxValue());
+    }
+
+    @Test
+    void shouldSerializeAlarmDescriptor() {
+        final var alarmDescription = "alarmDescription";
+        final var name = "name";
+        final var kpiId = "kpiId";
+        final var timestamp = "timestamp";
+
+        final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800));
+        final var alarmDescriptor =
+                new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
+
+        final var expectedAlarmDescriptor =
+                Monitoring.AlarmDescriptor.newBuilder()
+                        .setAlarmDescription(alarmDescription)
+                        .setName(name)
+                        .setKpiId(serializedKpiId)
+                        .setKpiValueRange(serializedKpiValueRange)
+                        .setTimestamp(timestamp)
+                        .build();
+
+        final var serializedAlarmDescriptor = serializer.serialize(alarmDescriptor);
+
+        assertThat(serializedAlarmDescriptor).isEqualTo(expectedAlarmDescriptor);
+    }
+
+    @Test
+    void shouldDeserializeAlarmDescriptor() {
+        final var alarmDescription = "alarmDescription";
+        final var name = "name";
+        final var kpiId = "kpiId";
+        final var timestamp = "timestamp";
+
+        final var kpiValueRange = new KpiValueRange(new IntegerKpiValue(23), new IntegerKpiValue(1800));
+        final var expectedAlarmDescriptor =
+                new AlarmDescriptor(alarmDescription, name, kpiId, kpiValueRange, timestamp);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+        final var serializedKpiValueRange = serializer.serialize(kpiValueRange);
+
+        final var serializedAlarmDescriptor =
+                Monitoring.AlarmDescriptor.newBuilder()
+                        .setAlarmDescription(alarmDescription)
+                        .setName(name)
+                        .setKpiId(serializedKpiId)
+                        .setKpiValueRange(serializedKpiValueRange)
+                        .setTimestamp(timestamp)
+                        .build();
+
+        final var alarmDescriptor = serializer.deserialize(serializedAlarmDescriptor);
+
+        assertThat(alarmDescriptor).usingRecursiveComparison().isEqualTo(expectedAlarmDescriptor);
+    }
+
+    @Test
+    void shouldSerializeAlarmResponse() {
+        final var alarmId = "alarmId";
+        final var text = "text";
+        final var kpiValue = new IntegerKpiValue(12);
+
+        final var alarmResponse = new AlarmResponse(alarmId, text, kpiValue);
+
+        final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId);
+        final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build();
+        final var serializedKpiValue = serializer.serialize(kpiValue);
+
+        final var expectedAlarmResponse =
+                Monitoring.AlarmResponse.newBuilder()
+                        .setAlarmId(serializedAlarmId)
+                        .setText(text)
+                        .setKpiValue(serializedKpiValue)
+                        .build();
+
+        final var serializedAlarmResponse = serializer.serialize(alarmResponse);
+
+        assertThat(serializedAlarmResponse).isEqualTo(expectedAlarmResponse);
+    }
+
+    @Test
+    void shouldDeserializeAlarmResponse() {
+        final var alarmId = "alarmId";
+        final var text = "text";
+        final var kpiValue = new IntegerKpiValue(12);
+
+        final var expectedAlarmResponse = new AlarmResponse(alarmId, text, kpiValue);
+
+        final var serializedAlarmIdUuid = serializer.serializeUuid(alarmId);
+        final var serializedAlarmId = AlarmID.newBuilder().setAlarmId(serializedAlarmIdUuid).build();
+        final var serializedKpiValue = serializer.serialize(kpiValue);
+
+        final var serializedAlarmResponse =
+                Monitoring.AlarmResponse.newBuilder()
+                        .setAlarmId(serializedAlarmId)
+                        .setText(text)
+                        .setKpiValue(serializedKpiValue)
+                        .build();
+
+        final var alarmResponse = serializer.deserialize(serializedAlarmResponse);
+
+        assertThat(alarmResponse).usingRecursiveComparison().isEqualTo(expectedAlarmResponse);
+    }
+
+    @Test
+    void shouldSerializeSubDescriptor() {
+        final var kpiId = "kpiId";
+        final var samplingDurationS = 10f;
+        final var samplingIntervalS = 45f;
+        final var startDate = "01/07/2022";
+        final var endDate = "02/07/2022";
+
+        final var subDescriptor =
+                new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        final var expectedSubDescriptor =
+                Monitoring.SubsDescriptor.newBuilder()
+                        .setKpiId(serializedKpiId)
+                        .setSamplingDurationS(samplingDurationS)
+                        .setSamplingIntervalS(samplingIntervalS)
+                        .setStartDate(startDate)
+                        .setEndDate(endDate)
+                        .build();
+
+        final var serializedSubDescriptor = serializer.serialize(subDescriptor);
+
+        assertThat(serializedSubDescriptor).isEqualTo(expectedSubDescriptor);
+    }
+
+    @Test
+    void shouldDeserializeSubDescriptor() {
+        final var kpiId = "kpiId";
+        final var samplingDurationS = 10f;
+        final var samplingIntervalS = 45f;
+        final var startDate = "01/07/2022";
+        final var endDate = "02/07/2022";
+
+        final var expectedSubDescriptor =
+                new SubsDescriptor(kpiId, samplingDurationS, samplingIntervalS, startDate, endDate);
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(kpiId);
+        final var serializedKpiId = KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        final var serializedSubDescriptor =
+                Monitoring.SubsDescriptor.newBuilder()
+                        .setKpiId(serializedKpiId)
+                        .setSamplingDurationS(samplingDurationS)
+                        .setSamplingIntervalS(samplingIntervalS)
+                        .setStartDate(startDate)
+                        .setEndDate(endDate)
+                        .build();
+
+        final var subDescriptor = serializer.deserialize(serializedSubDescriptor);
+
+        assertThat(subDescriptor).usingRecursiveComparison().isEqualTo(expectedSubDescriptor);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleCondition() {
+        final var expectedPolicyRuleConditionKpiId = "expectedPolicyRuleConditionKpiId";
+        final var expectedPolicyRuleConditionNumericalOperator =
+                NumericalOperator.POLICY_RULE_CONDITION_NUMERICAL_GREATER_THAN;
+        final var expectedPolicyRuleConditionKpiValue = new IntegerKpiValue(34);
+
+        final var expectedPolicyRuleCondition =
+                new PolicyRuleCondition(
+                        expectedPolicyRuleConditionKpiId,
+                        expectedPolicyRuleConditionNumericalOperator,
+                        expectedPolicyRuleConditionKpiValue);
+
+        final var serializedPolicyRuleCondition = serializer.serialize(expectedPolicyRuleCondition);
+
+        final var policyRuleCondition = serializer.deserialize(serializedPolicyRuleCondition);
+
+        assertThat(policyRuleCondition)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleCondition);
+    }
+
+    private static Stream<Arguments> provideBooleanOperators() {
+        return Stream.of(
+                Arguments.of(
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND,
+                        PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_AND),
+                Arguments.of(
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR,
+                        PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_OR),
+                Arguments.of(
+                        BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED,
+                        PolicyCondition.BooleanOperator.POLICYRULE_CONDITION_BOOLEAN_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideBooleanOperators")
+    void shouldSerializeBooleanOperator(
+            BooleanOperator booleanOperator, PolicyCondition.BooleanOperator expectedBooleanOperator) {
+        final var serializedBooleanOperator = serializer.serialize(booleanOperator);
+
+        assertThat(serializedBooleanOperator).isEqualTo(expectedBooleanOperator);
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideBooleanOperators")
+    void shouldDeserializeBooleanOperator(
+            BooleanOperator expectedBooleanOperator,
+            PolicyCondition.BooleanOperator serializedBooleanOperator) {
+        final var booleanOperator = serializer.deserialize(serializedBooleanOperator);
+
+        assertThat(booleanOperator).isEqualTo(expectedBooleanOperator);
+    }
+
+    private static Stream<Arguments> providePolicyRuleActionEnum() {
+        return Stream.of(
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_SET_DEVICE_STATUS,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_SET_DEVICE_STATUS),
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONFIGRULE,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONFIGRULE),
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_ADD_SERVICE_CONSTRAINT),
+                Arguments.of(
+                        PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION,
+                        PolicyAction.PolicyRuleActionEnum.POLICYRULE_ACTION_NO_ACTION));
+    }
+
+    @ParameterizedTest
+    @MethodSource("providePolicyRuleActionEnum")
+    void shouldSerializePolicyRuleActionEnum(
+            PolicyRuleActionEnum policyRuleActionEnum,
+            PolicyAction.PolicyRuleActionEnum expectedPolicyRuleActionEnum) {
+        final var serializedPolicyRuleActionEnum = serializer.serialize(policyRuleActionEnum);
+
+        assertThat(serializedPolicyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum);
+    }
+
+    @ParameterizedTest
+    @MethodSource("providePolicyRuleActionEnum")
+    void shouldDeserializePolicyRuleActionEnum(
+            PolicyRuleActionEnum expectedPolicyRuleActionEnum,
+            PolicyAction.PolicyRuleActionEnum serializedPolicyRuleActionEnum) {
+        final var policyRuleActionEnum = serializer.deserialize(serializedPolicyRuleActionEnum);
+
+        assertThat(policyRuleActionEnum).isEqualTo(expectedPolicyRuleActionEnum);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleAction() {
+        final var expectedPolicyRuleActionEnum =
+                PolicyRuleActionEnum.POLICY_RULE_ACTION_ADD_SERVICE_CONSTRAINT;
+        final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2");
+        final var policyRuleAction =
+                new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters);
+
+        final var serializedPolicyRuleActionEnum = serializer.serialize(expectedPolicyRuleActionEnum);
+
+        final var expectedPolicyRuleAction =
+                PolicyAction.PolicyRuleAction.newBuilder()
+                        .setAction(serializedPolicyRuleActionEnum)
+                        .addAllParameters(expectedPolicyRuleActionParameters)
+                        .build();
+
+        final var serializedPolicyRuleAction = serializer.serialize(policyRuleAction);
+
+        assertThat(serializedPolicyRuleAction)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleAction);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleAction() {
+        final var expectedPolicyRuleActionEnum = PolicyRuleActionEnum.POLICY_RULE_ACTION_NO_ACTION;
+        final var expectedPolicyRuleActionParameters = List.of("parameter1", "parameter2");
+        final var expectedPolicyRuleAction =
+                new PolicyRuleAction(expectedPolicyRuleActionEnum, expectedPolicyRuleActionParameters);
+
+        final var serializedPolicyRuleAction = serializer.serialize(expectedPolicyRuleAction);
+
+        final var policyRuleAction = serializer.deserialize(serializedPolicyRuleAction);
+
+        assertThat(policyRuleAction).usingRecursiveComparison().isEqualTo(expectedPolicyRuleAction);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleBasic() {
+        final var policyRuleBasic = createPolicyRuleBasic();
+
+        final var expectedPolicyRuleId = policyRuleBasic.getPolicyRuleId();
+        final var expectedPolicyRuleState = policyRuleBasic.getPolicyRuleState();
+        final var expectedPriority = policyRuleBasic.getPriority();
+        final var expectedPolicyRuleConditions = policyRuleBasic.getPolicyRuleConditions();
+        final var expectedBooleanOperator = policyRuleBasic.getBooleanOperator();
+        final var expectedPolicyRuleActions = policyRuleBasic.getPolicyRuleActions();
+
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId);
+        final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
+        final var serializedPolicyRuleConditions =
+                expectedPolicyRuleConditions.stream()
+                        .map(policyRuleCondition -> serializer.serialize(policyRuleCondition))
+                        .collect(Collectors.toList());
+        final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator);
+        final var serializedPolicyRuleActions =
+                expectedPolicyRuleActions.stream()
+                        .map(policyRuleAction -> serializer.serialize(policyRuleAction))
+                        .collect(Collectors.toList());
+
+        final var expectedPolicyRuleBasic =
+                Policy.PolicyRuleBasic.newBuilder()
+                        .setPolicyRuleId(serializedPolicyRuleId)
+                        .setPolicyRuleState(serializedPolicyRuleState)
+                        .setPriority(expectedPriority)
+                        .addAllConditionList(serializedPolicyRuleConditions)
+                        .setBooleanOperator(serializedBooleanOperator)
+                        .addAllActionList(serializedPolicyRuleActions)
+                        .build();
+
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+
+        assertThat(serializedPolicyRuleBasic)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleBasic);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleBasic() {
+        final var expectedPolicyRuleBasic = createPolicyRuleBasic();
+
+        final var expectedPolicyRuleId = expectedPolicyRuleBasic.getPolicyRuleId();
+        final var expectedPolicyRuleState = expectedPolicyRuleBasic.getPolicyRuleState();
+        final var expectedPriority = expectedPolicyRuleBasic.getPriority();
+        final var expectedPolicyRuleConditions = expectedPolicyRuleBasic.getPolicyRuleConditions();
+        final var expectedBooleanOperator = expectedPolicyRuleBasic.getBooleanOperator();
+        final var expectedPolicyRuleActions = expectedPolicyRuleBasic.getPolicyRuleActions();
+
+        final var serializedPolicyRuleId = serializer.serializePolicyRuleId(expectedPolicyRuleId);
+        final var serializedPolicyRuleState = serializer.serialize(expectedPolicyRuleState);
+        final var serializedPolicyRuleConditions =
+                expectedPolicyRuleConditions.stream()
+                        .map(policyRuleCondition -> serializer.serialize(policyRuleCondition))
+                        .collect(Collectors.toList());
+        final var serializedBooleanOperator = serializer.serialize(expectedBooleanOperator);
+        final var serializedPolicyRuleActions =
+                expectedPolicyRuleActions.stream()
+                        .map(policyRuleAction -> serializer.serialize(policyRuleAction))
+                        .collect(Collectors.toList());
+
+        final var serializedPolicyRuleBasic =
+                Policy.PolicyRuleBasic.newBuilder()
+                        .setPolicyRuleId(serializedPolicyRuleId)
+                        .setPolicyRuleState(serializedPolicyRuleState)
+                        .setPriority(expectedPriority)
+                        .addAllConditionList(serializedPolicyRuleConditions)
+                        .setBooleanOperator(serializedBooleanOperator)
+                        .addAllActionList(serializedPolicyRuleActions)
+                        .build();
+
+        final var policyRuleBasic = serializer.deserialize(serializedPolicyRuleBasic);
+
+        assertThat(policyRuleBasic).usingRecursiveComparison().isEqualTo(expectedPolicyRuleBasic);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleService() {
+        final var policyRuleBasic = createPolicyRuleBasic();
+        final var serviceId = new ServiceId("contextId", "serviceId");
+        final var deviceIds = List.of("deviceId1", "deviceId2");
+
+        final var policyRuleService = new PolicyRuleService(policyRuleBasic, serviceId, deviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+        final var serializedPolicyRuleServiceId = serializer.serialize(serviceId);
+        final var serializedPolicyRuleDeviceIds =
+                deviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var expectedPolicyRuleService =
+                Policy.PolicyRuleService.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .setServiceId(serializedPolicyRuleServiceId)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var serializedPolicyRuleService = serializer.serialize(policyRuleService);
+
+        assertThat(serializedPolicyRuleService)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleService);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleService() {
+        final var expectedPolicyRuleBasic = createPolicyRuleBasic();
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedDeviceIds = List.of("deviceId1", "deviceId2");
+        final var expectedPolicyRuleService =
+                new PolicyRuleService(expectedPolicyRuleBasic, expectedServiceId, expectedDeviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic);
+        final var serializedPolicyRuleServiceId = serializer.serialize(expectedServiceId);
+        final var serializedPolicyRuleDeviceIds =
+                expectedDeviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var serializedPolicyRuleService =
+                Policy.PolicyRuleService.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .setServiceId(serializedPolicyRuleServiceId)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var policyRuleService = serializer.deserialize(serializedPolicyRuleService);
+
+        assertThat(policyRuleService).usingRecursiveComparison().isEqualTo(expectedPolicyRuleService);
+    }
+
+    @Test
+    void shouldSerializePolicyRuleDevice() {
+        final var policyRuleBasic = createPolicyRuleBasic();
+        final var deviceIds = List.of("deviceId1", "deviceId2");
+
+        final var policyRuleDevice = new PolicyRuleDevice(policyRuleBasic, deviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(policyRuleBasic);
+        final var serializedPolicyRuleDeviceIds =
+                deviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var expectedPolicyRuleDevice =
+                Policy.PolicyRuleDevice.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var serializedPolicyRuleDevice = serializer.serialize(policyRuleDevice);
+
+        assertThat(serializedPolicyRuleDevice)
+                .usingRecursiveComparison()
+                .isEqualTo(expectedPolicyRuleDevice);
+    }
+
+    @Test
+    void shouldDeserializePolicyRuleDevice() {
+        final var expectedPolicyRuleBasic = createPolicyRuleBasic();
+        final var expectedDeviceIds = List.of("deviceId1", "deviceId2");
+        final var expectedPolicyRuleDevice =
+                new PolicyRuleDevice(expectedPolicyRuleBasic, expectedDeviceIds);
+
+        final var serializedPolicyRuleBasic = serializer.serialize(expectedPolicyRuleBasic);
+        final var serializedPolicyRuleDeviceIds =
+                expectedDeviceIds.stream()
+                        .map(deviceId -> serializer.serializeDeviceId(deviceId))
+                        .collect(Collectors.toList());
+
+        final var serializedPolicyRuleDevice =
+                Policy.PolicyRuleDevice.newBuilder()
+                        .setPolicyRuleBasic(serializedPolicyRuleBasic)
+                        .addAllDeviceList(serializedPolicyRuleDeviceIds)
+                        .build();
+
+        final var policyRuleDevice = serializer.deserialize(serializedPolicyRuleDevice);
+
+        assertThat(policyRuleDevice).usingRecursiveComparison().isEqualTo(expectedPolicyRuleDevice);
+    }
+
+    @Test
+    void shouldSerializeKpiId() {
+        final var kpiId = "kpiId";
+
+        final var kpiIdUuid = serializer.serializeUuid(kpiId);
+
+        final var expectedKpiId = Monitoring.KpiId.newBuilder().setKpiId(kpiIdUuid).build();
+
+        final var serializedKpiId = serializer.serializeKpiId(kpiId);
+
+        assertThat(serializedKpiId).usingRecursiveComparison().isEqualTo(expectedKpiId);
+    }
+
+    @Test
+    void shouldDeserializeKpiId() {
+        final var expectedKpiId = "expectedKpiId";
+
+        final var serializedKpiIdUuid = serializer.serializeUuid(expectedKpiId);
+        final var serializedKpiId = Monitoring.KpiId.newBuilder().setKpiId(serializedKpiIdUuid).build();
+
+        final var kpiId = serializer.deserialize(serializedKpiId);
+
+        assertThat(kpiId).isEqualTo(expectedKpiId);
+    }
+
+    @Test
+    void shouldSerializeKpi() {
+        final var expectedKpiId = "expectedKpiId";
+        final var expectedTimestamp = "expectedTimestamp";
+        final var expectedKpiValue = new FloatKpiValue(643.45f);
+
+        final var kpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue);
+
+        final var serializedKpiId = serializer.serializeKpiId(expectedKpiId);
+        final var serializedKpiValue = serializer.serialize(expectedKpiValue);
+
+        final var expectedKpi =
+                Monitoring.Kpi.newBuilder()
+                        .setKpiId(serializedKpiId)
+                        .setTimestamp(expectedTimestamp)
+                        .setKpiValue(serializedKpiValue)
+                        .build();
+
+        final var serializedKpi = serializer.serialize(kpi);
+
+        assertThat(serializedKpi).usingRecursiveComparison().isEqualTo(expectedKpi);
+    }
+
+    @Test
+    void shouldDeserializeKpi() {
+        final var expectedKpiId = "expectedKpiId";
+        final var expectedTimestamp = "expectedTimestamp";
+        final var expectedKpiValue = new BooleanKpiValue(true);
+        final var expectedKpi = new Kpi(expectedKpiId, expectedTimestamp, expectedKpiValue);
+
+        final var serializedKpi = serializer.serialize(expectedKpi);
+
+        final var kpi = serializer.deserialize(serializedKpi);
+
+        assertThat(kpi).usingRecursiveComparison().isEqualTo(expectedKpi);
+    }
+
+    @Test
+    void shouldSerializeKpiDescriptor() {
+        final var expectedKpiDescription = "expectedKpiDescription";
+        final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED;
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var expectedTopologyId = new TopologyId("contextId", "topologyId");
+        final var expectedEndPointId =
+                new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId");
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedSliceId = new SliceId("contextId", "sliceId");
+
+        final var kpiDescriptor =
+                new KpiDescriptor(
+                        expectedKpiDescription,
+                        expectedKpiSampleType,
+                        expectedDeviceId,
+                        expectedEndPointId,
+                        expectedServiceId,
+                        expectedSliceId);
+
+        final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedSliceId = serializer.serialize(expectedSliceId);
+
+        final var expectedKpiDescriptor =
+                Monitoring.KpiDescriptor.newBuilder()
+                        .setKpiDescription(expectedKpiDescription)
+                        .setKpiSampleType(serializedKpiSampleType)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointId(serializedEndPointId)
+                        .setServiceId(serializedServiceId)
+                        .setSliceId(serializedSliceId)
+                        .build();
+
+        final var serializedKpiDescriptor = serializer.serialize(kpiDescriptor);
+
+        assertThat(serializedKpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor);
+    }
+
+    @Test
+    void shouldDeserializeKpiDescriptor() {
+        final var expectedKpiDescription = "expectedKpiDescription";
+        final var expectedKpiSampleType = KpiSampleType.BYTES_RECEIVED;
+        final var expectedDeviceId = "expectedDeviceId";
+
+        final var expectedTopologyId = new TopologyId("contextId", "topologyId");
+        final var expectedEndPointId =
+                new EndPointId(expectedTopologyId, expectedDeviceId, "endpointId");
+        final var expectedServiceId = new ServiceId("contextId", "serviceId");
+        final var expectedSliceId = new SliceId("contextId", "sliceId");
+
+        final var expectedKpiDescriptor =
+                new KpiDescriptor(
+                        expectedKpiDescription,
+                        expectedKpiSampleType,
+                        expectedDeviceId,
+                        expectedEndPointId,
+                        expectedServiceId,
+                        expectedSliceId);
+
+        final var serializedKpiSampleType = serializer.serialize(expectedKpiSampleType);
+        final var serializedDeviceId = serializer.serializeDeviceId(expectedDeviceId);
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var serializedServiceId = serializer.serialize(expectedServiceId);
+        final var serializedSliceId = serializer.serialize(expectedSliceId);
+
+        final var serializedKpiDescriptor =
+                Monitoring.KpiDescriptor.newBuilder()
+                        .setKpiDescription(expectedKpiDescription)
+                        .setKpiSampleType(serializedKpiSampleType)
+                        .setDeviceId(serializedDeviceId)
+                        .setEndpointId(serializedEndPointId)
+                        .setServiceId(serializedServiceId)
+                        .setSliceId(serializedSliceId)
+                        .build();
+
+        final var kpiDescriptor = serializer.deserialize(serializedKpiDescriptor);
+
+        assertThat(kpiDescriptor).usingRecursiveComparison().isEqualTo(expectedKpiDescriptor);
+    }
+
+    @Test
+    void shouldSerializeDeviceConfig() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
+        final var expectedConfigRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
+        final var configRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleA =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedConfigRuleCustomA)
+                        .build();
+        final var expectedConfigRuleB =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setCustom(expectedConfigRuleCustomB)
+                        .build();
+
+        final var expectedDeviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder()
+                        .addAllConfigRules(List.of(expectedConfigRuleA, expectedConfigRuleB))
+                        .build();
+
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var configRuleTypeB = new ConfigRuleTypeCustom(configRuleCustomB);
+
+        final var configRuleA = new ConfigRule(ConfigActionEnum.SET, configRuleTypeA);
+        final var configRuleB = new ConfigRule(ConfigActionEnum.DELETE, configRuleTypeB);
+
+        final var deviceConfig = new DeviceConfig(List.of(configRuleA, configRuleB));
+        final var serializedDeviceConfig = serializer.serialize(deviceConfig);
+
+        assertThat(serializedDeviceConfig).isEqualTo(expectedDeviceConfig);
+    }
+
+    @Test
+    void shouldDeserializeDeviceConfig() {
+        final var expectedConfigRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustomB = new ConfigRuleCustom("resourceKeyB", "resourceValueB");
+
+        final var expectedConfigRuleTypeA = new ConfigRuleTypeCustom(expectedConfigRuleCustomA);
+        final var expectedConfigRuleTypeB = new ConfigRuleTypeCustom(expectedConfigRuleCustomB);
+
+        final var expectedConfigRuleA = new ConfigRule(ConfigActionEnum.SET, expectedConfigRuleTypeA);
+        final var expectedConfigRuleB =
+                new ConfigRule(ConfigActionEnum.DELETE, expectedConfigRuleTypeB);
+
+        final var expectedDeviceConfig =
+                new DeviceConfig(List.of(expectedConfigRuleA, expectedConfigRuleB));
+
+        final var configRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+
+        final var configRuleCustomB =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyB")
+                        .setResourceValue("resourceValueB")
+                        .build();
+
+        final var configRuleA =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(configRuleCustomA)
+                        .build();
+        final var configRuleB =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setCustom(configRuleCustomB)
+                        .build();
+        final var serializedDeviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder()
+                        .addAllConfigRules(List.of(configRuleA, configRuleB))
+                        .build();
+        final var deviceConfig = serializer.deserialize(serializedDeviceConfig);
+
+        assertThat(deviceConfig).usingRecursiveComparison().isEqualTo(expectedDeviceConfig);
+    }
+
+    private static Stream<Arguments> provideOperationalStatusEnum() {
+        return Stream.of(
+                Arguments.of(
+                        DeviceOperationalStatus.ENABLED,
+                        DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED),
+                Arguments.of(
+                        DeviceOperationalStatus.DISABLED,
+                        DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED),
+                Arguments.of(
+                        DeviceOperationalStatus.UNDEFINED,
+                        DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideOperationalStatusEnum")
+    void shouldSerializeOperationalStatusEnum(
+            DeviceOperationalStatus opStatus,
+            ContextOuterClass.DeviceOperationalStatusEnum expectedOpStatus) {
+        final var serializedOpStatus = serializer.serialize(opStatus);
+        assertThat(serializedOpStatus.getNumber()).isEqualTo(expectedOpStatus.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideOperationalStatusEnum")
+    void shouldDeserializeOperationalStatusEnum(
+            DeviceOperationalStatus expectedOpStatus,
+            ContextOuterClass.DeviceOperationalStatusEnum serializedOpStatus) {
+        final var operationalStatus = serializer.deserialize(serializedOpStatus);
+        assertThat(operationalStatus).isEqualTo(expectedOpStatus);
+    }
+
+    private static Stream<Arguments> provideDeviceDriverEnum() {
+        return Stream.of(
+                Arguments.of(
+                        DeviceDriverEnum.OPENCONFIG,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_OPENCONFIG),
+                Arguments.of(
+                        DeviceDriverEnum.TRANSPORT_API,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_TRANSPORT_API),
+                Arguments.of(DeviceDriverEnum.P4, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_P4),
+                Arguments.of(
+                        DeviceDriverEnum.IETF_NETWORK_TOPOLOGY,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_IETF_NETWORK_TOPOLOGY),
+                Arguments.of(
+                        DeviceDriverEnum.ONF_TR_352,
+                        ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_ONF_TR_352),
+                Arguments.of(
+                        DeviceDriverEnum.UNDEFINED, ContextOuterClass.DeviceDriverEnum.DEVICEDRIVER_UNDEFINED));
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldSerializeDeviceDriverEnum(
+            DeviceDriverEnum deviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum expectedDeviceDriverEnum) {
+        final var serializedDeviceDriverEnum = serializer.serialize(deviceDriverEnum);
+
+        assertThat(serializedDeviceDriverEnum.getNumber())
+                .isEqualTo(expectedDeviceDriverEnum.getNumber());
+    }
+
+    @ParameterizedTest
+    @MethodSource("provideDeviceDriverEnum")
+    void shouldDeserializeDeviceDriverEnum(
+            DeviceDriverEnum expectedDeviceDriverEnum,
+            ContextOuterClass.DeviceDriverEnum serializedDeviceDriverEnum) {
+        final var deviceDriverEnum = serializer.deserialize(serializedDeviceDriverEnum);
+
+        assertThat(deviceDriverEnum).isEqualTo(expectedDeviceDriverEnum);
+    }
+
+    @Test
+    void shouldSerializeEndPoint() {
+        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 EndPoint(endPointId, endPointType, kpiSampleTypes, location);
+
+        final var serializedEndPointId = serializer.serialize(endPointId);
+        final var serializedKpiSampleTypes =
+                kpiSampleTypes.stream()
+                        .map(kpiSampleType -> serializer.serialize(kpiSampleType))
+                        .collect(Collectors.toList());
+        final var serializedLocation = serializer.serialize(location);
+
+        final var expectedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(endPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedLocation)
+                        .build();
+
+        final var serializedEndPoint = serializer.serialize(endPoint);
+
+        assertThat(serializedEndPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldDeserializeEndPoint() {
+        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 expectedLocationTypeRegion = new LocationTypeRegion("ATH");
+        final var expectedLocation = new Location(expectedLocationTypeRegion);
+
+        final var expectedEndPoint =
+                new EndPoint(
+                        expectedEndPointId, expectedEndPointType, expectedKpiSampleTypes, expectedLocation);
+
+        final var serializedEndPointId = serializer.serialize(expectedEndPointId);
+        final var serializedKpiSampleTypes =
+                expectedKpiSampleTypes.stream()
+                        .map(kpiSampleType -> serializer.serialize(kpiSampleType))
+                        .collect(Collectors.toList());
+        final var serializedLocation = serializer.serialize(expectedLocation);
+
+        final var serializedEndPoint =
+                ContextOuterClass.EndPoint.newBuilder()
+                        .setEndpointId(serializedEndPointId)
+                        .setEndpointType(expectedEndPointType)
+                        .addAllKpiSampleTypes(serializedKpiSampleTypes)
+                        .setEndpointLocation(serializedLocation)
+                        .build();
+
+        final var endPoint = serializer.deserialize(serializedEndPoint);
+
+        assertThat(endPoint).usingRecursiveComparison().isEqualTo(expectedEndPoint);
+    }
+
+    @Test
+    void shouldSerializeDevice() {
+        final var expectedConfigRuleCustomA =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleCustomA = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+
+        final var expectedConfigRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET)
+                        .setCustom(expectedConfigRuleCustomA)
+                        .build();
+
+        final var configRuleTypeA = new ConfigRuleTypeCustom(configRuleCustomA);
+        final var deviceConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.SET, configRuleTypeA)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        final var expectedDeviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(expectedConfigRule).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
+
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
+
+        deviceBuilder.setDeviceId(serializedDeviceId);
+        deviceBuilder.setDeviceType("deviceType");
+        deviceBuilder.setDeviceConfig(expectedDeviceConfig);
+        deviceBuilder.setDeviceOperationalStatus(serializer.serialize(DeviceOperationalStatus.ENABLED));
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
+        final var expectedDevice = deviceBuilder.build();
+
+        final var device =
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        deviceConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
+        final var serializedDevice = serializer.serialize(device);
+
+        assertThat(serializedDevice).isEqualTo(expectedDevice);
+    }
+
+    @Test
+    void shouldDeserializeDevice() {
+        final var configRuleCustom = new ConfigRuleCustom("resourceKeyA", "resourceValueA");
+        final var expectedConfigRuleCustom =
+                ContextOuterClass.ConfigRule_Custom.newBuilder()
+                        .setResourceKey("resourceKeyA")
+                        .setResourceValue("resourceValueA")
+                        .build();
+        final var configRuleType = new ConfigRuleTypeCustom(configRuleCustom);
+
+        final var expectedConfig =
+                new DeviceConfig(List.of(new ConfigRule(ConfigActionEnum.DELETE, configRuleType)));
+
+        final var deviceDrivers = List.of(DeviceDriverEnum.IETF_NETWORK_TOPOLOGY, DeviceDriverEnum.P4);
+
+        final var expectedTopologyIdA = new TopologyId("contextIdA", "idA");
+        final var expectedDeviceIdA = "expectedDeviceIdA";
+        final var expectedIdA = "expectedIdA";
+        final var endPointIdA = new EndPointId(expectedTopologyIdA, expectedDeviceIdA, expectedIdA);
+
+        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 EndPoint(endPointIdA, endPointTypeA, kpiSampleTypesA, locationA);
+
+        final var expectedTopologyIdB = new TopologyId("contextIdB", "idB");
+        final var expectedDeviceIdB = "expectedDeviceIdB";
+        final var expectedIdB = "expectedIdB";
+        final var endPointIdB = new EndPointId(expectedTopologyIdB, expectedDeviceIdB, expectedIdB);
+
+        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 EndPoint(endPointIdB, endPointTypeB, kpiSampleTypesB, locationB);
+
+        final var endPoints = List.of(endPointA, endPointB);
+
+        final var expectedDevice =
+                new Device(
+                        "deviceId",
+                        "deviceType",
+                        expectedConfig,
+                        DeviceOperationalStatus.ENABLED,
+                        deviceDrivers,
+                        endPoints);
+
+        final var configRule =
+                ContextOuterClass.ConfigRule.newBuilder()
+                        .setAction(ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE)
+                        .setCustom(expectedConfigRuleCustom)
+                        .build();
+        final var deviceConfig =
+                ContextOuterClass.DeviceConfig.newBuilder().addConfigRules(configRule).build();
+
+        final var serializedDeviceId = serializer.serializeDeviceId("deviceId");
+        final var serializedDeviceOperationalStatus =
+                serializer.serialize(DeviceOperationalStatus.ENABLED);
+
+        final var serializedDrivers =
+                deviceDrivers.stream()
+                        .map(deviceDriverEnum -> serializer.serialize(deviceDriverEnum))
+                        .collect(Collectors.toList());
+
+        final var serializedEndPoints =
+                endPoints.stream()
+                        .map(endPoint -> serializer.serialize(endPoint))
+                        .collect(Collectors.toList());
+
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
+        deviceBuilder.setDeviceId(serializedDeviceId);
+        deviceBuilder.setDeviceType("deviceType");
+        deviceBuilder.setDeviceConfig(deviceConfig);
+        deviceBuilder.setDeviceOperationalStatus(serializedDeviceOperationalStatus);
+        deviceBuilder.addAllDeviceDrivers(serializedDrivers);
+        deviceBuilder.addAllDeviceEndpoints(serializedEndPoints);
+
+        final var serializedDevice = deviceBuilder.build();
+        final var device = serializer.deserialize(serializedDevice);
+
+        assertThat(device).usingRecursiveComparison().isEqualTo(expectedDevice);
+    }
+
+    @Test
+    void shouldSerializeUuid() {
+        final var expectedUuid = "uuid";
+
+        final var serializeUuid = serializer.serializeUuid(expectedUuid);
+
+        assertThat(serializeUuid.getUuid()).isEqualTo(expectedUuid);
+    }
+
+    @Test
+    void shouldDeserializeUuid() {
+        final var expectedUuid = "uuid";
+
+        final var uuid = serializer.deserialize(Uuid.newBuilder().setUuid(expectedUuid).build());
+
+        assertThat(uuid).isEqualTo(expectedUuid);
+    }
+}
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
new file mode 100644
index 0000000000000000000000000000000000000000..5048be4750db97e35f3007645927f2c7ea24be85
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicy.java
@@ -0,0 +1,49 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: context-policy.proto
+
+package context_policy;
+
+public final class ContextPolicy {
+  private ContextPolicy() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n\024context-policy.proto\022\016context_policy\032\r" +
+      "context.proto\032\014policy.proto2\324\002\n\024ContextP" +
+      "olicyService\022?\n\021ListPolicyRuleIds\022\016.cont" +
+      "ext.Empty\032\030.policy.PolicyRuleIdList\"\000\022;\n" +
+      "\017ListPolicyRules\022\016.context.Empty\032\026.polic" +
+      "y.PolicyRuleList\"\000\022@\n\rGetPolicyRule\022\024.po" +
+      "licy.PolicyRuleId\032\027.policy.PolicyRuleBas" +
+      "ic\"\000\022@\n\rSetPolicyRule\022\027.policy.PolicyRul" +
+      "eBasic\032\024.policy.PolicyRuleId\"\000\022:\n\020Remove" +
+      "PolicyRule\022\024.policy.PolicyRuleId\032\016.conte" +
+      "xt.Empty\"\000b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          context.ContextOuterClass.getDescriptor(),
+          policy.Policy.getDescriptor(),
+        });
+    context.ContextOuterClass.getDescriptor();
+    policy.Policy.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
new file mode 100644
index 0000000000000000000000000000000000000000..4870737ab496fff5c36ffa0824e44669532ecec0
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyService.java
@@ -0,0 +1,24 @@
+package context_policy;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context-policy.proto")
+public interface ContextPolicyService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request);
+    
+    io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request);
+    
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..b1a93a6014a9fb0d9ae0d0e528fda1a1e2658416
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceBean.java
@@ -0,0 +1,59 @@
+package context_policy;
+
+import io.grpc.BindableService;
+import io.quarkus.grpc.GrpcService;
+import io.quarkus.grpc.runtime.MutinyBean;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context-policy.proto")
+public class ContextPolicyServiceBean extends MutinyContextPolicyServiceGrpc.ContextPolicyServiceImplBase implements BindableService, MutinyBean {
+
+    private final ContextPolicyService delegate;
+
+    ContextPolicyServiceBean(@GrpcService ContextPolicyService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listPolicyRuleIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listPolicyRules(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+       try {
+         return delegate.getPolicyRule(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+       try {
+         return delegate.setPolicyRule(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+       try {
+         return delegate.removePolicyRule(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..d255415707710db2b225f4d4f7e3f7c4ee6fd6d5
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceClient.java
@@ -0,0 +1,44 @@
+package context_policy;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context-policy.proto")
+public class ContextPolicyServiceClient implements ContextPolicyService, MutinyClient<MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub> {
+
+    private final MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub stub;
+
+    public ContextPolicyServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub, MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyContextPolicyServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyContextPolicyServiceGrpc.MutinyContextPolicyServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+       return stub.listPolicyRuleIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+       return stub.listPolicyRules(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+       return stub.getPolicyRule(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+       return stub.setPolicyRule(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+       return stub.removePolicyRule(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..69735c34ce57d91725f81c7c23d94ad60da1db9b
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/ContextPolicyServiceGrpc.java
@@ -0,0 +1,586 @@
+package context_policy;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ * <pre>
+ * created as a separate service to prevent import-loops in context and policy
+ * </pre>
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: context-policy.proto")
+public final class ContextPolicyServiceGrpc {
+
+  private ContextPolicyServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "context_policy.ContextPolicyService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleIdList> getListPolicyRuleIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListPolicyRuleIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = policy.Policy.PolicyRuleIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleIdList> getListPolicyRuleIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleIdList> getListPolicyRuleIdsMethod;
+    if ((getListPolicyRuleIdsMethod = ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getListPolicyRuleIdsMethod = ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod) == null) {
+          ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod = getListPolicyRuleIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListPolicyRuleIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("ListPolicyRuleIds"))
+              .build();
+        }
+      }
+    }
+    return getListPolicyRuleIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleList> getListPolicyRulesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListPolicyRules",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = policy.Policy.PolicyRuleList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      policy.Policy.PolicyRuleList> getListPolicyRulesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleList> getListPolicyRulesMethod;
+    if ((getListPolicyRulesMethod = ContextPolicyServiceGrpc.getListPolicyRulesMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getListPolicyRulesMethod = ContextPolicyServiceGrpc.getListPolicyRulesMethod) == null) {
+          ContextPolicyServiceGrpc.getListPolicyRulesMethod = getListPolicyRulesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, policy.Policy.PolicyRuleList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListPolicyRules"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("ListPolicyRules"))
+              .build();
+        }
+      }
+    }
+    return getListPolicyRulesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      policy.Policy.PolicyRuleBasic> getGetPolicyRuleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetPolicyRule",
+      requestType = policy.Policy.PolicyRuleId.class,
+      responseType = policy.Policy.PolicyRuleBasic.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      policy.Policy.PolicyRuleBasic> getGetPolicyRuleMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleBasic> getGetPolicyRuleMethod;
+    if ((getGetPolicyRuleMethod = ContextPolicyServiceGrpc.getGetPolicyRuleMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getGetPolicyRuleMethod = ContextPolicyServiceGrpc.getGetPolicyRuleMethod) == null) {
+          ContextPolicyServiceGrpc.getGetPolicyRuleMethod = getGetPolicyRuleMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleId, policy.Policy.PolicyRuleBasic>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetPolicyRule"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleBasic.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("GetPolicyRule"))
+              .build();
+        }
+      }
+    }
+    return getGetPolicyRuleMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleBasic,
+      policy.Policy.PolicyRuleId> getSetPolicyRuleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetPolicyRule",
+      requestType = policy.Policy.PolicyRuleBasic.class,
+      responseType = policy.Policy.PolicyRuleId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleBasic,
+      policy.Policy.PolicyRuleId> getSetPolicyRuleMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleBasic, policy.Policy.PolicyRuleId> getSetPolicyRuleMethod;
+    if ((getSetPolicyRuleMethod = ContextPolicyServiceGrpc.getSetPolicyRuleMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getSetPolicyRuleMethod = ContextPolicyServiceGrpc.getSetPolicyRuleMethod) == null) {
+          ContextPolicyServiceGrpc.getSetPolicyRuleMethod = getSetPolicyRuleMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleBasic, policy.Policy.PolicyRuleId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetPolicyRule"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleBasic.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("SetPolicyRule"))
+              .build();
+        }
+      }
+    }
+    return getSetPolicyRuleMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      context.ContextOuterClass.Empty> getRemovePolicyRuleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemovePolicyRule",
+      requestType = policy.Policy.PolicyRuleId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId,
+      context.ContextOuterClass.Empty> getRemovePolicyRuleMethod() {
+    io.grpc.MethodDescriptor<policy.Policy.PolicyRuleId, context.ContextOuterClass.Empty> getRemovePolicyRuleMethod;
+    if ((getRemovePolicyRuleMethod = ContextPolicyServiceGrpc.getRemovePolicyRuleMethod) == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        if ((getRemovePolicyRuleMethod = ContextPolicyServiceGrpc.getRemovePolicyRuleMethod) == null) {
+          ContextPolicyServiceGrpc.getRemovePolicyRuleMethod = getRemovePolicyRuleMethod =
+              io.grpc.MethodDescriptor.<policy.Policy.PolicyRuleId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemovePolicyRule"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  policy.Policy.PolicyRuleId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextPolicyServiceMethodDescriptorSupplier("RemovePolicyRule"))
+              .build();
+        }
+      }
+    }
+    return getRemovePolicyRuleMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static ContextPolicyServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceStub>() {
+        @java.lang.Override
+        public ContextPolicyServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextPolicyServiceStub(channel, callOptions);
+        }
+      };
+    return ContextPolicyServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static ContextPolicyServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceBlockingStub>() {
+        @java.lang.Override
+        public ContextPolicyServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextPolicyServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return ContextPolicyServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static ContextPolicyServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextPolicyServiceFutureStub>() {
+        @java.lang.Override
+        public ContextPolicyServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextPolicyServiceFutureStub(channel, callOptions);
+        }
+      };
+    return ContextPolicyServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static abstract class ContextPolicyServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void listPolicyRuleIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListPolicyRuleIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listPolicyRules(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListPolicyRulesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetPolicyRuleMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setPolicyRule(policy.Policy.PolicyRuleBasic request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetPolicyRuleMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removePolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemovePolicyRuleMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getListPolicyRuleIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                policy.Policy.PolicyRuleIdList>(
+                  this, METHODID_LIST_POLICY_RULE_IDS)))
+          .addMethod(
+            getListPolicyRulesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                policy.Policy.PolicyRuleList>(
+                  this, METHODID_LIST_POLICY_RULES)))
+          .addMethod(
+            getGetPolicyRuleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleId,
+                policy.Policy.PolicyRuleBasic>(
+                  this, METHODID_GET_POLICY_RULE)))
+          .addMethod(
+            getSetPolicyRuleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleBasic,
+                policy.Policy.PolicyRuleId>(
+                  this, METHODID_SET_POLICY_RULE)))
+          .addMethod(
+            getRemovePolicyRuleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                policy.Policy.PolicyRuleId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_POLICY_RULE)))
+          .build();
+    }
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static final class ContextPolicyServiceStub extends io.grpc.stub.AbstractAsyncStub<ContextPolicyServiceStub> {
+    private ContextPolicyServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextPolicyServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextPolicyServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void listPolicyRuleIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListPolicyRuleIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listPolicyRules(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListPolicyRulesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getPolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetPolicyRuleMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setPolicyRule(policy.Policy.PolicyRuleBasic request,
+        io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetPolicyRuleMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removePolicyRule(policy.Policy.PolicyRuleId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemovePolicyRuleMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static final class ContextPolicyServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<ContextPolicyServiceBlockingStub> {
+    private ContextPolicyServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextPolicyServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextPolicyServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleIdList listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListPolicyRuleIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleList listPolicyRules(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListPolicyRulesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleBasic getPolicyRule(policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetPolicyRuleMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public policy.Policy.PolicyRuleId setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetPolicyRuleMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removePolicyRule(policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemovePolicyRuleMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   * <pre>
+   * created as a separate service to prevent import-loops in context and policy
+   * </pre>
+   */
+  public static final class ContextPolicyServiceFutureStub extends io.grpc.stub.AbstractFutureStub<ContextPolicyServiceFutureStub> {
+    private ContextPolicyServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextPolicyServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextPolicyServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListPolicyRuleIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleList> listPolicyRules(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListPolicyRulesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleBasic> getPolicyRule(
+        policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetPolicyRuleMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<policy.Policy.PolicyRuleId> setPolicyRule(
+        policy.Policy.PolicyRuleBasic request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetPolicyRuleMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removePolicyRule(
+        policy.Policy.PolicyRuleId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemovePolicyRuleMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_LIST_POLICY_RULE_IDS = 0;
+  private static final int METHODID_LIST_POLICY_RULES = 1;
+  private static final int METHODID_GET_POLICY_RULE = 2;
+  private static final int METHODID_SET_POLICY_RULE = 3;
+  private static final int METHODID_REMOVE_POLICY_RULE = 4;
+
+  private static final class MethodHandlers<Req, Resp> implements
+      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+    private final ContextPolicyServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(ContextPolicyServiceImplBase serviceImpl, int methodId) {
+      this.serviceImpl = serviceImpl;
+      this.methodId = methodId;
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        case METHODID_LIST_POLICY_RULE_IDS:
+          serviceImpl.listPolicyRuleIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList>) responseObserver);
+          break;
+        case METHODID_LIST_POLICY_RULES:
+          serviceImpl.listPolicyRules((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver);
+          break;
+        case METHODID_GET_POLICY_RULE:
+          serviceImpl.getPolicyRule((policy.Policy.PolicyRuleId) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic>) responseObserver);
+          break;
+        case METHODID_SET_POLICY_RULE:
+          serviceImpl.setPolicyRule((policy.Policy.PolicyRuleBasic) request,
+              (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId>) responseObserver);
+          break;
+        case METHODID_REMOVE_POLICY_RULE:
+          serviceImpl.removePolicyRule((policy.Policy.PolicyRuleId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        default:
+          throw new AssertionError();
+      }
+    }
+
+    @java.lang.Override
+    @java.lang.SuppressWarnings("unchecked")
+    public io.grpc.stub.StreamObserver<Req> invoke(
+        io.grpc.stub.StreamObserver<Resp> responseObserver) {
+      switch (methodId) {
+        default:
+          throw new AssertionError();
+      }
+    }
+  }
+
+  private static abstract class ContextPolicyServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    ContextPolicyServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return context_policy.ContextPolicy.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("ContextPolicyService");
+    }
+  }
+
+  private static final class ContextPolicyServiceFileDescriptorSupplier
+      extends ContextPolicyServiceBaseDescriptorSupplier {
+    ContextPolicyServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class ContextPolicyServiceMethodDescriptorSupplier
+      extends ContextPolicyServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    ContextPolicyServiceMethodDescriptorSupplier(String methodName) {
+      this.methodName = methodName;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
+      return getServiceDescriptor().findMethodByName(methodName);
+    }
+  }
+
+  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
+
+  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
+    io.grpc.ServiceDescriptor result = serviceDescriptor;
+    if (result == null) {
+      synchronized (ContextPolicyServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new ContextPolicyServiceFileDescriptorSupplier())
+              .addMethod(getListPolicyRuleIdsMethod())
+              .addMethod(getListPolicyRulesMethod())
+              .addMethod(getGetPolicyRuleMethod())
+              .addMethod(getSetPolicyRuleMethod())
+              .addMethod(getRemovePolicyRuleMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java b/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e6e29c0468afe5656d537cd0fe79e7b9ede7bad
--- /dev/null
+++ b/src/policy/target/generated-sources/grpc/context_policy/MutinyContextPolicyServiceGrpc.java
@@ -0,0 +1,224 @@
+package context_policy;
+
+import static context_policy.ContextPolicyServiceGrpc.getServiceDescriptor;
+import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context-policy.proto")
+public final class MutinyContextPolicyServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyContextPolicyServiceGrpc() {}
+
+    public static MutinyContextPolicyServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyContextPolicyServiceStub(channel);
+    }
+
+    /**
+     * <pre>
+     *  created as a separate service to prevent import-loops in context and policy
+     * </pre>
+     */
+    public static final class MutinyContextPolicyServiceStub extends io.grpc.stub.AbstractStub<MutinyContextPolicyServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private ContextPolicyServiceGrpc.ContextPolicyServiceStub delegateStub;
+
+        private MutinyContextPolicyServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = ContextPolicyServiceGrpc.newStub(channel);
+        }
+
+        private MutinyContextPolicyServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = ContextPolicyServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyContextPolicyServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyContextPolicyServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listPolicyRuleIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listPolicyRules);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getPolicyRule);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setPolicyRule);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removePolicyRule);
+        }
+
+    }
+
+    /**
+     * <pre>
+     *  created as a separate service to prevent import-loops in context and policy
+     * </pre>
+     */
+    public static abstract class ContextPolicyServiceImplBase implements io.grpc.BindableService {
+
+        private String compression;
+        /**
+        * Set whether the server will try to use a compressed response.
+        *
+        * @param compression the compression, e.g {@code gzip}
+        */
+        public ContextPolicyServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleIdList> listPolicyRuleIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleList> listPolicyRules(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleBasic> getPolicyRule(policy.Policy.PolicyRuleId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<policy.Policy.PolicyRuleId> setPolicyRule(policy.Policy.PolicyRuleBasic request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removePolicyRule(policy.Policy.PolicyRuleId 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(
+                            context_policy.ContextPolicyServiceGrpc.getListPolicyRuleIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            policy.Policy.PolicyRuleIdList>(
+                                            this, METHODID_LIST_POLICY_RULE_IDS, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getListPolicyRulesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            policy.Policy.PolicyRuleList>(
+                                            this, METHODID_LIST_POLICY_RULES, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getGetPolicyRuleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleId,
+                                            policy.Policy.PolicyRuleBasic>(
+                                            this, METHODID_GET_POLICY_RULE, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getSetPolicyRuleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleBasic,
+                                            policy.Policy.PolicyRuleId>(
+                                            this, METHODID_SET_POLICY_RULE, compression)))
+                    .addMethod(
+                            context_policy.ContextPolicyServiceGrpc.getRemovePolicyRuleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            policy.Policy.PolicyRuleId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_POLICY_RULE, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_LIST_POLICY_RULE_IDS = 0;
+    private static final int METHODID_LIST_POLICY_RULES = 1;
+    private static final int METHODID_GET_POLICY_RULE = 2;
+    private static final int METHODID_SET_POLICY_RULE = 3;
+    private static final int METHODID_REMOVE_POLICY_RULE = 4;
+
+    private static final class MethodHandlers<Req, Resp> implements
+            io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
+            io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
+        private final ContextPolicyServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(ContextPolicyServiceImplBase serviceImpl, int methodId, String compression) {
+            this.serviceImpl = serviceImpl;
+            this.methodId = methodId;
+            this.compression = compression;
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                case METHODID_LIST_POLICY_RULE_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listPolicyRuleIds);
+                    break;
+                case METHODID_LIST_POLICY_RULES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleList>) responseObserver,
+                            compression,
+                            serviceImpl::listPolicyRules);
+                    break;
+                case METHODID_GET_POLICY_RULE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleId) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleBasic>) responseObserver,
+                            compression,
+                            serviceImpl::getPolicyRule);
+                    break;
+                case METHODID_SET_POLICY_RULE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleBasic) request,
+                            (io.grpc.stub.StreamObserver<policy.Policy.PolicyRuleId>) responseObserver,
+                            compression,
+                            serviceImpl::setPolicyRule);
+                    break;
+                case METHODID_REMOVE_POLICY_RULE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((policy.Policy.PolicyRuleId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removePolicyRule);
+                    break;
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+
+        @java.lang.Override
+        @java.lang.SuppressWarnings("unchecked")
+        public io.grpc.stub.StreamObserver<Req> invoke(io.grpc.stub.StreamObserver<Resp> responseObserver) {
+            switch (methodId) {
+                default:
+                    throw new java.lang.AssertionError();
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/src/policy/target/generated-sources/grpc/policy/Policy.java b/src/policy/target/generated-sources/grpc/policy/Policy.java
index d332560fa0ceaabe472c8f78db306e7e8d9246eb..541f97f47bd2e69711a795dc454841054e865a3a 100644
--- a/src/policy/target/generated-sources/grpc/policy/Policy.java
+++ b/src/policy/target/generated-sources/grpc/policy/Policy.java
@@ -1457,17 +1457,29 @@ public final class Policy {
     policy.Policy.PolicyRuleIdOrBuilder getPolicyRuleIdOrBuilder();
 
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return Whether the policyRuleState field is set.
      */
     boolean hasPolicyRuleState();
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return The policyRuleState.
      */
     policy.Policy.PolicyRuleState getPolicyRuleState();
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      */
     policy.Policy.PolicyRuleStateOrBuilder getPolicyRuleStateOrBuilder();
 
@@ -1652,7 +1664,7 @@ public final class Policy {
             }
             case 18: {
               policy.Policy.PolicyRuleState.Builder subBuilder = null;
-              if (((bitField0_ & 0x00000001) != 0)) {
+              if (policyRuleState_ != null) {
                 subBuilder = policyRuleState_.toBuilder();
               }
               policyRuleState_ = input.readMessage(policy.Policy.PolicyRuleState.parser(), extensionRegistry);
@@ -1660,7 +1672,7 @@ public final class Policy {
                 subBuilder.mergeFrom(policyRuleState_);
                 policyRuleState_ = subBuilder.buildPartial();
               }
-              bitField0_ |= 0x00000001;
+
               break;
             }
             case 24: {
@@ -1669,9 +1681,9 @@ public final class Policy {
               break;
             }
             case 34: {
-              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
                 conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>();
-                mutable_bitField0_ |= 0x00000002;
+                mutable_bitField0_ |= 0x00000001;
               }
               conditionList_.add(
                   input.readMessage(policy.PolicyCondition.PolicyRuleCondition.parser(), extensionRegistry));
@@ -1684,9 +1696,9 @@ public final class Policy {
               break;
             }
             case 50: {
-              if (!((mutable_bitField0_ & 0x00000004) != 0)) {
+              if (!((mutable_bitField0_ & 0x00000002) != 0)) {
                 actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>();
-                mutable_bitField0_ |= 0x00000004;
+                mutable_bitField0_ |= 0x00000002;
               }
               actionList_.add(
                   input.readMessage(policy.PolicyAction.PolicyRuleAction.parser(), extensionRegistry));
@@ -1707,10 +1719,10 @@ public final class Policy {
         throw new com.google.protobuf.InvalidProtocolBufferException(
             e).setUnfinishedMessage(this);
       } finally {
-        if (((mutable_bitField0_ & 0x00000002) != 0)) {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
           conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
         }
-        if (((mutable_bitField0_ & 0x00000004) != 0)) {
+        if (((mutable_bitField0_ & 0x00000002) != 0)) {
           actionList_ = java.util.Collections.unmodifiableList(actionList_);
         }
         this.unknownFields = unknownFields.build();
@@ -1730,7 +1742,6 @@ public final class Policy {
               policy.Policy.PolicyRuleBasic.class, policy.Policy.PolicyRuleBasic.Builder.class);
     }
 
-    private int bitField0_;
     public static final int POLICYRULEID_FIELD_NUMBER = 1;
     private policy.Policy.PolicyRuleId policyRuleId_;
     /**
@@ -1760,15 +1771,23 @@ public final class Policy {
     public static final int POLICYRULESTATE_FIELD_NUMBER = 2;
     private policy.Policy.PolicyRuleState policyRuleState_;
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return Whether the policyRuleState field is set.
      */
     @java.lang.Override
     public boolean hasPolicyRuleState() {
-      return ((bitField0_ & 0x00000001) != 0);
+      return policyRuleState_ != null;
     }
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      * @return The policyRuleState.
      */
     @java.lang.Override
@@ -1776,11 +1795,15 @@ public final class Policy {
       return policyRuleState_ == null ? policy.Policy.PolicyRuleState.getDefaultInstance() : policyRuleState_;
     }
     /**
-     * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+     * <pre>
+     *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+     * </pre>
+     *
+     * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
      */
     @java.lang.Override
     public policy.Policy.PolicyRuleStateOrBuilder getPolicyRuleStateOrBuilder() {
-      return policyRuleState_ == null ? policy.Policy.PolicyRuleState.getDefaultInstance() : policyRuleState_;
+      return getPolicyRuleState();
     }
 
     public static final int PRIORITY_FIELD_NUMBER = 3;
@@ -1958,7 +1981,7 @@ public final class Policy {
       if (policyRuleId_ != null) {
         output.writeMessage(1, getPolicyRuleId());
       }
-      if (((bitField0_ & 0x00000001) != 0)) {
+      if (policyRuleState_ != null) {
         output.writeMessage(2, getPolicyRuleState());
       }
       if (priority_ != 0) {
@@ -1986,7 +2009,7 @@ public final class Policy {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(1, getPolicyRuleId());
       }
-      if (((bitField0_ & 0x00000001) != 0)) {
+      if (policyRuleState_ != null) {
         size += com.google.protobuf.CodedOutputStream
           .computeMessageSize(2, getPolicyRuleState());
       }
@@ -2201,7 +2224,6 @@ public final class Policy {
       private void maybeForceBuilderInitialization() {
         if (com.google.protobuf.GeneratedMessageV3
                 .alwaysUseFieldBuilders) {
-          getPolicyRuleStateFieldBuilder();
           getConditionListFieldBuilder();
           getActionListFieldBuilder();
         }
@@ -2218,14 +2240,14 @@ public final class Policy {
         if (policyRuleStateBuilder_ == null) {
           policyRuleState_ = null;
         } else {
-          policyRuleStateBuilder_.clear();
+          policyRuleState_ = null;
+          policyRuleStateBuilder_ = null;
         }
-        bitField0_ = (bitField0_ & ~0x00000001);
         priority_ = 0;
 
         if (conditionListBuilder_ == null) {
           conditionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+          bitField0_ = (bitField0_ & ~0x00000001);
         } else {
           conditionListBuilder_.clear();
         }
@@ -2233,7 +2255,7 @@ public final class Policy {
 
         if (actionListBuilder_ == null) {
           actionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+          bitField0_ = (bitField0_ & ~0x00000002);
         } else {
           actionListBuilder_.clear();
         }
@@ -2264,25 +2286,21 @@ public final class Policy {
       public policy.Policy.PolicyRuleBasic buildPartial() {
         policy.Policy.PolicyRuleBasic result = new policy.Policy.PolicyRuleBasic(this);
         int from_bitField0_ = bitField0_;
-        int to_bitField0_ = 0;
         if (policyRuleIdBuilder_ == null) {
           result.policyRuleId_ = policyRuleId_;
         } else {
           result.policyRuleId_ = policyRuleIdBuilder_.build();
         }
-        if (((from_bitField0_ & 0x00000001) != 0)) {
-          if (policyRuleStateBuilder_ == null) {
-            result.policyRuleState_ = policyRuleState_;
-          } else {
-            result.policyRuleState_ = policyRuleStateBuilder_.build();
-          }
-          to_bitField0_ |= 0x00000001;
+        if (policyRuleStateBuilder_ == null) {
+          result.policyRuleState_ = policyRuleState_;
+        } else {
+          result.policyRuleState_ = policyRuleStateBuilder_.build();
         }
         result.priority_ = priority_;
         if (conditionListBuilder_ == null) {
-          if (((bitField0_ & 0x00000002) != 0)) {
+          if (((bitField0_ & 0x00000001) != 0)) {
             conditionList_ = java.util.Collections.unmodifiableList(conditionList_);
-            bitField0_ = (bitField0_ & ~0x00000002);
+            bitField0_ = (bitField0_ & ~0x00000001);
           }
           result.conditionList_ = conditionList_;
         } else {
@@ -2290,15 +2308,14 @@ public final class Policy {
         }
         result.booleanOperator_ = booleanOperator_;
         if (actionListBuilder_ == null) {
-          if (((bitField0_ & 0x00000004) != 0)) {
+          if (((bitField0_ & 0x00000002) != 0)) {
             actionList_ = java.util.Collections.unmodifiableList(actionList_);
-            bitField0_ = (bitField0_ & ~0x00000004);
+            bitField0_ = (bitField0_ & ~0x00000002);
           }
           result.actionList_ = actionList_;
         } else {
           result.actionList_ = actionListBuilder_.build();
         }
-        result.bitField0_ = to_bitField0_;
         onBuilt();
         return result;
       }
@@ -2360,7 +2377,7 @@ public final class Policy {
           if (!other.conditionList_.isEmpty()) {
             if (conditionList_.isEmpty()) {
               conditionList_ = other.conditionList_;
-              bitField0_ = (bitField0_ & ~0x00000002);
+              bitField0_ = (bitField0_ & ~0x00000001);
             } else {
               ensureConditionListIsMutable();
               conditionList_.addAll(other.conditionList_);
@@ -2373,7 +2390,7 @@ public final class Policy {
               conditionListBuilder_.dispose();
               conditionListBuilder_ = null;
               conditionList_ = other.conditionList_;
-              bitField0_ = (bitField0_ & ~0x00000002);
+              bitField0_ = (bitField0_ & ~0x00000001);
               conditionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                    getConditionListFieldBuilder() : null;
@@ -2389,7 +2406,7 @@ public final class Policy {
           if (!other.actionList_.isEmpty()) {
             if (actionList_.isEmpty()) {
               actionList_ = other.actionList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
+              bitField0_ = (bitField0_ & ~0x00000002);
             } else {
               ensureActionListIsMutable();
               actionList_.addAll(other.actionList_);
@@ -2402,7 +2419,7 @@ public final class Policy {
               actionListBuilder_.dispose();
               actionListBuilder_ = null;
               actionList_ = other.actionList_;
-              bitField0_ = (bitField0_ & ~0x00000004);
+              bitField0_ = (bitField0_ & ~0x00000002);
               actionListBuilder_ = 
                 com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                    getActionListFieldBuilder() : null;
@@ -2564,14 +2581,22 @@ public final class Policy {
       private com.google.protobuf.SingleFieldBuilderV3<
           policy.Policy.PolicyRuleState, policy.Policy.PolicyRuleState.Builder, policy.Policy.PolicyRuleStateOrBuilder> policyRuleStateBuilder_;
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        * @return Whether the policyRuleState field is set.
        */
       public boolean hasPolicyRuleState() {
-        return ((bitField0_ & 0x00000001) != 0);
+        return policyRuleStateBuilder_ != null || policyRuleState_ != null;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        * @return The policyRuleState.
        */
       public policy.Policy.PolicyRuleState getPolicyRuleState() {
@@ -2582,7 +2607,11 @@ public final class Policy {
         }
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder setPolicyRuleState(policy.Policy.PolicyRuleState value) {
         if (policyRuleStateBuilder_ == null) {
@@ -2594,11 +2623,15 @@ public final class Policy {
         } else {
           policyRuleStateBuilder_.setMessage(value);
         }
-        bitField0_ |= 0x00000001;
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder setPolicyRuleState(
           policy.Policy.PolicyRuleState.Builder builderForValue) {
@@ -2608,17 +2641,19 @@ public final class Policy {
         } else {
           policyRuleStateBuilder_.setMessage(builderForValue.build());
         }
-        bitField0_ |= 0x00000001;
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder mergePolicyRuleState(policy.Policy.PolicyRuleState value) {
         if (policyRuleStateBuilder_ == null) {
-          if (((bitField0_ & 0x00000001) != 0) &&
-              policyRuleState_ != null &&
-              policyRuleState_ != policy.Policy.PolicyRuleState.getDefaultInstance()) {
+          if (policyRuleState_ != null) {
             policyRuleState_ =
               policy.Policy.PolicyRuleState.newBuilder(policyRuleState_).mergeFrom(value).buildPartial();
           } else {
@@ -2628,32 +2663,45 @@ public final class Policy {
         } else {
           policyRuleStateBuilder_.mergeFrom(value);
         }
-        bitField0_ |= 0x00000001;
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public Builder clearPolicyRuleState() {
         if (policyRuleStateBuilder_ == null) {
           policyRuleState_ = null;
           onChanged();
         } else {
-          policyRuleStateBuilder_.clear();
+          policyRuleState_ = null;
+          policyRuleStateBuilder_ = null;
         }
-        bitField0_ = (bitField0_ & ~0x00000001);
+
         return this;
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public policy.Policy.PolicyRuleState.Builder getPolicyRuleStateBuilder() {
-        bitField0_ |= 0x00000001;
+        
         onChanged();
         return getPolicyRuleStateFieldBuilder().getBuilder();
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       public policy.Policy.PolicyRuleStateOrBuilder getPolicyRuleStateOrBuilder() {
         if (policyRuleStateBuilder_ != null) {
@@ -2664,7 +2712,11 @@ public final class Policy {
         }
       }
       /**
-       * <code>optional .policy.PolicyRuleState policyRuleState = 2;</code>
+       * <pre>
+       *policy.proto:58:12: Explicit 'optional' labels are disallowed in the Proto3 syntax. To define 'optional' fields in Proto3, simply remove the 'optional' label, as fields are 'optional' by default.
+       * </pre>
+       *
+       * <code>.policy.PolicyRuleState policyRuleState = 2;</code>
        */
       private com.google.protobuf.SingleFieldBuilderV3<
           policy.Policy.PolicyRuleState, policy.Policy.PolicyRuleState.Builder, policy.Policy.PolicyRuleStateOrBuilder> 
@@ -2714,9 +2766,9 @@ public final class Policy {
       private java.util.List<policy.PolicyCondition.PolicyRuleCondition> conditionList_ =
         java.util.Collections.emptyList();
       private void ensureConditionListIsMutable() {
-        if (!((bitField0_ & 0x00000002) != 0)) {
+        if (!((bitField0_ & 0x00000001) != 0)) {
           conditionList_ = new java.util.ArrayList<policy.PolicyCondition.PolicyRuleCondition>(conditionList_);
-          bitField0_ |= 0x00000002;
+          bitField0_ |= 0x00000001;
          }
       }
 
@@ -2910,7 +2962,7 @@ public final class Policy {
       public Builder clearConditionList() {
         if (conditionListBuilder_ == null) {
           conditionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000002);
+          bitField0_ = (bitField0_ & ~0x00000001);
           onChanged();
         } else {
           conditionListBuilder_.clear();
@@ -3015,7 +3067,7 @@ public final class Policy {
           conditionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               policy.PolicyCondition.PolicyRuleCondition, policy.PolicyCondition.PolicyRuleCondition.Builder, policy.PolicyCondition.PolicyRuleConditionOrBuilder>(
                   conditionList_,
-                  ((bitField0_ & 0x00000002) != 0),
+                  ((bitField0_ & 0x00000001) != 0),
                   getParentForChildren(),
                   isClean());
           conditionList_ = null;
@@ -3100,9 +3152,9 @@ public final class Policy {
       private java.util.List<policy.PolicyAction.PolicyRuleAction> actionList_ =
         java.util.Collections.emptyList();
       private void ensureActionListIsMutable() {
-        if (!((bitField0_ & 0x00000004) != 0)) {
+        if (!((bitField0_ & 0x00000002) != 0)) {
           actionList_ = new java.util.ArrayList<policy.PolicyAction.PolicyRuleAction>(actionList_);
-          bitField0_ |= 0x00000004;
+          bitField0_ |= 0x00000002;
          }
       }
 
@@ -3296,7 +3348,7 @@ public final class Policy {
       public Builder clearActionList() {
         if (actionListBuilder_ == null) {
           actionList_ = java.util.Collections.emptyList();
-          bitField0_ = (bitField0_ & ~0x00000004);
+          bitField0_ = (bitField0_ & ~0x00000002);
           onChanged();
         } else {
           actionListBuilder_.clear();
@@ -3401,7 +3453,7 @@ public final class Policy {
           actionListBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
               policy.PolicyAction.PolicyRuleAction, policy.PolicyAction.PolicyRuleAction.Builder, policy.PolicyAction.PolicyRuleActionOrBuilder>(
                   actionList_,
-                  ((bitField0_ & 0x00000004) != 0),
+                  ((bitField0_ & 0x00000002) != 0),
                   getParentForChildren(),
                   isClean());
           actionList_ = null;
@@ -9338,50 +9390,49 @@ public final class Policy {
       "olicy-condition.proto\032\023policy-action.pro" +
       "to\"+\n\014PolicyRuleId\022\033\n\004uuid\030\001 \001(\0132\r.conte" +
       "xt.Uuid\"=\n\017PolicyRuleState\022*\n\017policyRule" +
-      "State\030\001 \001(\0162\021.policy.RuleState\"\256\002\n\017Polic" +
+      "State\030\001 \001(\0162\021.policy.RuleState\"\225\002\n\017Polic" +
       "yRuleBasic\022*\n\014policyRuleId\030\001 \001(\0132\024.polic" +
-      "y.PolicyRuleId\0225\n\017policyRuleState\030\002 \001(\0132" +
-      "\027.policy.PolicyRuleStateH\000\210\001\001\022\020\n\010priorit" +
-      "y\030\003 \001(\r\0222\n\rconditionList\030\004 \003(\0132\033.policy." +
-      "PolicyRuleCondition\0220\n\017booleanOperator\030\005" +
-      " \001(\0162\027.policy.BooleanOperator\022,\n\nactionL" +
-      "ist\030\006 \003(\0132\030.policy.PolicyRuleActionB\022\n\020_" +
-      "policyRuleState\"\223\001\n\021PolicyRuleService\0220\n" +
-      "\017policyRuleBasic\030\001 \001(\0132\027.policy.PolicyRu" +
-      "leBasic\022%\n\tserviceId\030\002 \001(\0132\022.context.Ser" +
-      "viceId\022%\n\ndeviceList\030\003 \003(\0132\021.context.Dev" +
-      "iceId\"k\n\020PolicyRuleDevice\0220\n\017policyRuleB" +
-      "asic\030\001 \001(\0132\027.policy.PolicyRuleBasic\022%\n\nd" +
-      "eviceList\030\002 \003(\0132\021.context.DeviceId\"B\n\020Po" +
-      "licyRuleIdList\022.\n\020policyRuleIdList\030\001 \003(\013" +
-      "2\024.policy.PolicyRuleId\"Q\n\025PolicyRuleServ" +
-      "iceList\0228\n\025policyRuleServiceList\030\001 \003(\0132\031" +
-      ".policy.PolicyRuleService\"N\n\024PolicyRuleD" +
-      "eviceList\0226\n\024policyRuleDeviceList\030\001 \003(\0132" +
-      "\030.policy.PolicyRuleDevice\";\n\016PolicyRuleL" +
-      "ist\022)\n\013policyRules\030\001 \003(\0132\024.policy.Policy" +
-      "RuleId*\365\001\n\tRuleState\022\024\n\020POLICY_UNDEFINED" +
-      "\020\000\022\021\n\rPOLICY_FAILED\020\001\022\023\n\017POLICY_INSERTED" +
-      "\020\002\022\024\n\020POLICY_VALIDATED\020\003\022\026\n\022POLICY_PROVI" +
-      "SIONED\020\004\022\021\n\rPOLICY_ACTIVE\020\005\022\023\n\017POLICY_EN" +
-      "FORCED\020\006\022\026\n\022POLICY_INEFFECTIVE\020\007\022\024\n\020POLI" +
-      "CY_EFFECTIVE\020\010\022\022\n\016POLICY_UPDATED\020\t\022\022\n\016PO" +
-      "LICY_REMOVED\020\n2\323\004\n\rPolicyService\022H\n\020Poli" +
-      "cyAddService\022\031.policy.PolicyRuleService\032" +
-      "\027.policy.PolicyRuleState\"\000\022F\n\017PolicyAddD" +
-      "evice\022\030.policy.PolicyRuleDevice\032\027.policy" +
-      ".PolicyRuleState\"\000\022K\n\023PolicyUpdateServic" +
-      "e\022\031.policy.PolicyRuleService\032\027.policy.Po" +
-      "licyRuleState\"\000\022I\n\022PolicyUpdateDevice\022\030." +
-      "policy.PolicyRuleDevice\032\027.policy.PolicyR" +
-      "uleState\"\000\022?\n\014PolicyDelete\022\024.policy.Poli" +
-      "cyRuleId\032\027.policy.PolicyRuleState\"\000\022E\n\020G" +
-      "etPolicyService\022\024.policy.PolicyRuleId\032\031." +
-      "policy.PolicyRuleService\"\000\022C\n\017GetPolicyD" +
-      "evice\022\024.policy.PolicyRuleId\032\030.policy.Pol" +
-      "icyRuleDevice\"\000\022K\n\024GetPolicyByServiceId\022" +
-      "\022.context.ServiceId\032\035.policy.PolicyRuleS" +
-      "erviceList\"\000b\006proto3"
+      "y.PolicyRuleId\0220\n\017policyRuleState\030\002 \001(\0132" +
+      "\027.policy.PolicyRuleState\022\020\n\010priority\030\003 \001" +
+      "(\r\0222\n\rconditionList\030\004 \003(\0132\033.policy.Polic" +
+      "yRuleCondition\0220\n\017booleanOperator\030\005 \001(\0162" +
+      "\027.policy.BooleanOperator\022,\n\nactionList\030\006" +
+      " \003(\0132\030.policy.PolicyRuleAction\"\223\001\n\021Polic" +
+      "yRuleService\0220\n\017policyRuleBasic\030\001 \001(\0132\027." +
+      "policy.PolicyRuleBasic\022%\n\tserviceId\030\002 \001(" +
+      "\0132\022.context.ServiceId\022%\n\ndeviceList\030\003 \003(" +
+      "\0132\021.context.DeviceId\"k\n\020PolicyRuleDevice" +
+      "\0220\n\017policyRuleBasic\030\001 \001(\0132\027.policy.Polic" +
+      "yRuleBasic\022%\n\ndeviceList\030\002 \003(\0132\021.context" +
+      ".DeviceId\"B\n\020PolicyRuleIdList\022.\n\020policyR" +
+      "uleIdList\030\001 \003(\0132\024.policy.PolicyRuleId\"Q\n" +
+      "\025PolicyRuleServiceList\0228\n\025policyRuleServ" +
+      "iceList\030\001 \003(\0132\031.policy.PolicyRuleService" +
+      "\"N\n\024PolicyRuleDeviceList\0226\n\024policyRuleDe" +
+      "viceList\030\001 \003(\0132\030.policy.PolicyRuleDevice" +
+      "\";\n\016PolicyRuleList\022)\n\013policyRules\030\001 \003(\0132" +
+      "\024.policy.PolicyRuleId*\365\001\n\tRuleState\022\024\n\020P" +
+      "OLICY_UNDEFINED\020\000\022\021\n\rPOLICY_FAILED\020\001\022\023\n\017" +
+      "POLICY_INSERTED\020\002\022\024\n\020POLICY_VALIDATED\020\003\022" +
+      "\026\n\022POLICY_PROVISIONED\020\004\022\021\n\rPOLICY_ACTIVE" +
+      "\020\005\022\023\n\017POLICY_ENFORCED\020\006\022\026\n\022POLICY_INEFFE" +
+      "CTIVE\020\007\022\024\n\020POLICY_EFFECTIVE\020\010\022\022\n\016POLICY_" +
+      "UPDATED\020\t\022\022\n\016POLICY_REMOVED\020\n2\323\004\n\rPolicy" +
+      "Service\022H\n\020PolicyAddService\022\031.policy.Pol" +
+      "icyRuleService\032\027.policy.PolicyRuleState\"" +
+      "\000\022F\n\017PolicyAddDevice\022\030.policy.PolicyRule" +
+      "Device\032\027.policy.PolicyRuleState\"\000\022K\n\023Pol" +
+      "icyUpdateService\022\031.policy.PolicyRuleServ" +
+      "ice\032\027.policy.PolicyRuleState\"\000\022I\n\022Policy" +
+      "UpdateDevice\022\030.policy.PolicyRuleDevice\032\027" +
+      ".policy.PolicyRuleState\"\000\022?\n\014PolicyDelet" +
+      "e\022\024.policy.PolicyRuleId\032\027.policy.PolicyR" +
+      "uleState\"\000\022E\n\020GetPolicyService\022\024.policy." +
+      "PolicyRuleId\032\031.policy.PolicyRuleService\"" +
+      "\000\022C\n\017GetPolicyDevice\022\024.policy.PolicyRule" +
+      "Id\032\030.policy.PolicyRuleDevice\"\000\022K\n\024GetPol" +
+      "icyByServiceId\022\022.context.ServiceId\032\035.pol" +
+      "icy.PolicyRuleServiceList\"\000b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -9407,7 +9458,7 @@ public final class Policy {
     internal_static_policy_PolicyRuleBasic_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_policy_PolicyRuleBasic_descriptor,
-        new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", "Priority", "ConditionList", "BooleanOperator", "ActionList", "PolicyRuleState", });
+        new java.lang.String[] { "PolicyRuleId", "PolicyRuleState", "Priority", "ConditionList", "BooleanOperator", "ActionList", });
     internal_static_policy_PolicyRuleService_descriptor =
       getDescriptor().getMessageTypes().get(3);
     internal_static_policy_PolicyRuleService_fieldAccessorTable = new
diff --git a/src/policy/target/kubernetes/kubernetes.yml b/src/policy/target/kubernetes/kubernetes.yml
index 97929a86330aa71f708199fa3333764e0fd31e38..06068f0f5983b4ef385ee60b8a6cb5d812cab253 100644
--- a/src/policy/target/kubernetes/kubernetes.yml
+++ b/src/policy/target/kubernetes/kubernetes.yml
@@ -3,8 +3,8 @@ apiVersion: v1
 kind: Service
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+    app.quarkus.io/commit-id: 1d77cb00ae8f577885de32f01f4740f865853863
+    app.quarkus.io/build-timestamp: 2022-07-26 - 10:46:55 +0000
   labels:
     app.kubernetes.io/name: policyservice
     app: policyservice
@@ -25,8 +25,8 @@ apiVersion: apps/v1
 kind: Deployment
 metadata:
   annotations:
-    app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-    app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+    app.quarkus.io/commit-id: 1d77cb00ae8f577885de32f01f4740f865853863
+    app.quarkus.io/build-timestamp: 2022-07-26 - 10:46:55 +0000
   labels:
     app: policyservice
     app.kubernetes.io/name: policyservice
@@ -39,8 +39,8 @@ spec:
   template:
     metadata:
       annotations:
-        app.quarkus.io/commit-id: cfe69c57feb1d488c2dda620021e3c62d67fc3d3
-        app.quarkus.io/build-timestamp: 2022-07-14 - 07:52:22 +0000
+        app.quarkus.io/commit-id: 1d77cb00ae8f577885de32f01f4740f865853863
+        app.quarkus.io/build-timestamp: 2022-07-26 - 10:46:55 +0000
       labels:
         app: policyservice
         app.kubernetes.io/name: policyservice
@@ -51,10 +51,10 @@ spec:
               valueFrom:
                 fieldRef:
                   fieldPath: metadata.namespace
-            - name: MONITORING_SERVICE_HOST
-              value: monitoringservice
             - name: SERVICE_SERVICE_HOST
               value: serviceservice
+            - name: MONITORING_SERVICE_HOST
+              value: monitoringservice
             - name: CONTEXT_SERVICE_HOST
               value: contextservice
           image: registry.gitlab.com/teraflow-h2020/controller/policy:0.1.0
diff --git a/src/service/.gitlab-ci.yml b/src/service/.gitlab-ci.yml
index 043b5c990eaa0266105439bdf7a02143b859b960..c40bc90cfe0b20669fe89aa9d6ecda562d7d0422 100644
--- a/src/service/.gitlab-ci.yml
+++ b/src/service/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build service:
   variables:
     IMAGE_NAME: 'service' # name of the microservice
diff --git a/src/slice/.gitlab-ci.yml b/src/slice/.gitlab-ci.yml
index 3fe479f71ce1d8ed6fd72fe3ed95736a981713ea..9393e6b29a2fbe180e74944375c871af4c4ae3d6 100644
--- a/src/slice/.gitlab-ci.yml
+++ b/src/slice/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build slice:
   variables:
     IMAGE_NAME: 'slice' # name of the microservice
diff --git a/src/webui/.gitlab-ci.yml b/src/webui/.gitlab-ci.yml
index afafed4b2892ba05a33595f961e0add738adc041..e939d834761834f60e13045f7ce941f41887b956 100644
--- a/src/webui/.gitlab-ci.yml
+++ b/src/webui/.gitlab-ci.yml
@@ -12,7 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# Build, tag and push the Docker image to the GitLab registry
+# Build, tag, and push the Docker image to the GitLab Docker registry
 build webui:
   variables:
     IMAGE_NAME: 'webui' # name of the microservice