diff --git a/.gitignore b/.gitignore
index 4928d96e5bc49184acc85a975aed70d9557c0051..8f01f60bf9c979a098c81d1609cc176cab630a5c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -76,7 +76,11 @@ docs/_build/
 
 # PyBuilder
 .pybuilder/
-target/
+**/target/*
+!**/target/generated-sources/
+!**/target/kubernetes/
+**/target/kubernetes/kubernetes.json
+!**/target/kubernetes/kubernetes.yml
 
 # Jupyter Notebook
 .ipynb_checkpoints
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 493947f6bf93d54a3f433d7d0d781186a74e9345..83fdd5cc43c538479f9601fcfb24a5a1e45ce49f 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -18,4 +18,5 @@ include:
   - local: '/src/service/.gitlab-ci.yml'
   - local: '/src/tester_integration/.gitlab-ci.yml'
   - local: '/src/tester_functional/.gitlab-ci.yml'
+  - local: '/src/automation/.gitlab-ci.yml'
   
diff --git a/manifests/automationservice.yaml b/manifests/automationservice.yaml
new file mode 120000
index 0000000000000000000000000000000000000000..5e8d3c1c82db0c03119f29865e2a7edabcdfb0eb
--- /dev/null
+++ b/manifests/automationservice.yaml
@@ -0,0 +1 @@
+../src/automation/target/kubernetes/kubernetes.yml
\ No newline at end of file
diff --git a/src/automation/.dockerignore b/src/automation/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..4c66178780820dd94d769b9ae809e987088a7cdb
--- /dev/null
+++ b/src/automation/.dockerignore
@@ -0,0 +1,10 @@
+# Ignore everything except from pom.xml, src directory & target directory.
+*
+!pom.xml
+!src/*
+!target/*-runner
+!target/*-runner.jar
+!target/lib/*
+!target/quarkus-app/*
+# Directory needed for gRPC services
+!target/generated-sources/*
diff --git a/src/automation/.env.example b/src/automation/.env.example
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/src/automation/.gitignore b/src/automation/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..cc2fdeff3e322ed1c20729f59c70aa0b9232135c
--- /dev/null
+++ b/src/automation/.gitignore
@@ -0,0 +1,39 @@
+**/target/*
+!**/target/generated-sources/
+!**/target/kubernetes/
+**/target/kubernetes/kubernetes.json
+!**/target/kubernetes/kubernetes.yml
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Misc ###
+.env
diff --git a/src/automation/.gitlab-ci.yml b/src/automation/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..612a6a107075652c8ee624da661a646d0b3f3d1e
--- /dev/null
+++ b/src/automation/.gitlab-ci.yml
@@ -0,0 +1,47 @@
+# Package application needed to run tests & build the image on next stage
+build automation:
+  variables:
+    IMAGE_NAME: 'automation' # name of the microservice
+    IMAGE_NAME_TEST: 'automation-test' # name of the microservice
+    IMAGE_TAG: '0.0.1' # tag of the container image (production, development, etc)
+  stage: build
+  script:
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target builder
+  rules:
+    - changes:
+        - src/$IMAGE_NAME/**
+        - .gitlab-ci.yml
+
+# Run tests, build & push the image
+unit_test automation:
+  variables:
+    IMAGE_NAME: 'automation' # name of the microservice
+    IMAGE_NAME_TEST: 'automation-test' # name of the microservice
+    IMAGE_TAG: '0.0.1' # tag of the container image (production, development, etc)
+  stage: unit_test
+  needs:
+    - build automation
+  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/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target unit-test
+    - docker build -t "$IMAGE_NAME:$IMAGE_TAG" -f ./src/$IMAGE_NAME/src/main/docker/Dockerfile.multistage.jvm ./src/$IMAGE_NAME/ --target release
+    - docker tag "$IMAGE_NAME:$IMAGE_TAG" "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+    - docker push "$CI_REGISTRY_IMAGE/$IMAGE_NAME:$IMAGE_TAG"
+  rules:
+    - changes:
+        - src/$IMAGE_NAME/**
+        - .gitlab-ci.yml
+
+# Deployment of automation service in Kubernetes Cluster
+deploy automation:
+  stage: deploy
+  needs:
+    - build automation
+    - unit_test automation
+  script:
+    - kubectl version
+    - kubectl get all
+    - kubectl apply -f "manifests/automationservice.yaml"
+    - kubectl delete pods --selector app=automationservice
+    - kubectl get all
diff --git a/src/automation/.java-version b/src/automation/.java-version
new file mode 100644
index 0000000000000000000000000000000000000000..b4de3947675361a7770d29b8982c407b0ec6b2a0
--- /dev/null
+++ b/src/automation/.java-version
@@ -0,0 +1 @@
+11
diff --git a/src/automation/.mvn/wrapper/MavenWrapperDownloader.java b/src/automation/.mvn/wrapper/MavenWrapperDownloader.java
new file mode 100644
index 0000000000000000000000000000000000000000..e76d1f3241d38db9b28f05133823bbed1ad289ff
--- /dev/null
+++ b/src/automation/.mvn/wrapper/MavenWrapperDownloader.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2007-present the original author or authors.
+ *
+ * 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
+ *
+ *      https://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.
+ */
+import java.net.*;
+import java.io.*;
+import java.nio.channels.*;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    private static final String WRAPPER_VERSION = "0.5.6";
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
+        + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if(mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if(mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if(!outputFile.getParentFile().exists()) {
+            if(!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
+            String username = System.getenv("MVNW_USERNAME");
+            char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
+            Authenticator.setDefault(new Authenticator() {
+                @Override
+                protected PasswordAuthentication getPasswordAuthentication() {
+                    return new PasswordAuthentication(username, password);
+                }
+            });
+        }
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}
diff --git a/src/automation/.mvn/wrapper/maven-wrapper.jar b/src/automation/.mvn/wrapper/maven-wrapper.jar
new file mode 100644
index 0000000000000000000000000000000000000000..2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054
Binary files /dev/null and b/src/automation/.mvn/wrapper/maven-wrapper.jar differ
diff --git a/src/automation/.mvn/wrapper/maven-wrapper.properties b/src/automation/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000000000000000000000000000000000000..ffdc10e59f87823d5abb635aa2e37bf281698e83
--- /dev/null
+++ b/src/automation/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,2 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip
+wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
diff --git a/src/automation/README.md b/src/automation/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..dc8aef6b11581ed43d0b6f8d2889428d23aefbc1
--- /dev/null
+++ b/src/automation/README.md
@@ -0,0 +1,19 @@
+# How to run locally the automation service (tested in Ubuntu 20.04)
+
+
+## Compile code
+
+`
+./mvnw compile
+`
+## Execute unit tests
+
+`
+./mvnw test
+`
+## Run service
+
+`
+./mvnw quarkus:dev
+`
+
diff --git a/src/automation/mvnw b/src/automation/mvnw
new file mode 100755
index 0000000000000000000000000000000000000000..a16b5431b4c3cab50323a3f558003fd0abd87dad
--- /dev/null
+++ b/src/automation/mvnw
@@ -0,0 +1,310 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you 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
+#
+#    https://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.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    if [ -n "$MVNW_REPOURL" ]; then
+      jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    else
+      jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    fi
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+    if $cygwin; then
+      wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
+    fi
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            wget "$jarUrl" -O "$wrapperJarPath"
+        else
+            wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
+        fi
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+            curl -o "$wrapperJarPath" "$jarUrl" -f
+        else
+            curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
+        fi
+
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        # For Cygwin, switch paths to Windows format before running javac
+        if $cygwin; then
+          javaClass=`cygpath --path --windows "$javaClass"`
+        fi
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/src/automation/mvnw.cmd b/src/automation/mvnw.cmd
new file mode 100644
index 0000000000000000000000000000000000000000..c8d43372c986d97911cdc21bd87e0cbe3d83bdda
--- /dev/null
+++ b/src/automation/mvnw.cmd
@@ -0,0 +1,182 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+
+FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+    IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Found %WRAPPER_JAR%
+    )
+) else (
+    if not "%MVNW_REPOURL%" == "" (
+        SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
+    )
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Couldn't find %WRAPPER_JAR%, downloading it ...
+        echo Downloading from: %DOWNLOAD_URL%
+    )
+
+    powershell -Command "&{"^
+		"$webclient = new-object System.Net.WebClient;"^
+		"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+		"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+		"}"^
+		"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
+		"}"
+    if "%MVNW_VERBOSE%" == "true" (
+        echo Finished downloading %WRAPPER_JAR%
+    )
+)
+@REM End of extension
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/src/automation/pom.xml b/src/automation/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0bf37ea67c0953cc63da34046da93ab281adf76c
--- /dev/null
+++ b/src/automation/pom.xml
@@ -0,0 +1,458 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>eu.teraflow</groupId>
+  <artifactId>automation</artifactId>
+  <version>0.0.1</version>
+  <name>TeraFlow Automation Component</name>
+  <description>TeraFlow Automation Component</description>
+
+  <properties>
+    <java.version>11</java.version>
+    <!-- https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#parameters -->
+    <maven.compiler.parameters>true</maven.compiler.parameters>
+    <maven.compiler.source>${java.version}</maven.compiler.source>
+    <maven.compiler.target>${java.version}</maven.compiler.target>
+    <maven.version>3.8.1</maven.version>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+
+    <assertj.version>3.20.2</assertj.version>
+    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
+    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
+    <jacoco.report.unit-test>jacoco-unit-tests.exec</jacoco.report.unit-test>
+    <jacoco.report.integration-test>jacoco-integration-tests.exec</jacoco.report.integration-test>
+    <jacoco.version>0.8.6</jacoco.version>
+    <!-- Maven plugins -->
+    <docker-maven-plugin.version>0.34.1</docker-maven-plugin.version>
+    <maven-assembly-plugin.version>3.3.0</maven-assembly-plugin.version>
+    <maven-clean-plugin.version>3.1.0</maven-clean-plugin.version>
+    <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
+    <maven-dependency-plugin.version>3.1.2</maven-dependency-plugin.version>
+    <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version>
+    <maven-enforcer-plugin.version>3.0.0-M3</maven-enforcer-plugin.version>
+    <maven-install-plugin.version>3.0.0-M1</maven-install-plugin.version>
+    <maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
+    <maven-resources-plugin.version>3.2.0</maven-resources-plugin.version>
+    <maven-surefire-plugin.version>3.0.0-M5</maven-surefire-plugin.version>
+    <sonarsource-scanner-plugin.version>3.8.0.2131</sonarsource-scanner-plugin.version>
+    <spotless-plugin.version>2.10.3</spotless-plugin.version>
+    <versions-maven-plugin.version>2.8.1</versions-maven-plugin.version>
+    <quarkus-maven-plugin.version>${quarkus.platform.version}</quarkus-maven-plugin.version>
+    <!-- Third-party Dependencies -->
+    <quarkus.platform.version>2.2.2.Final</quarkus.platform.version>
+  </properties>
+
+  <distributionManagement>
+    <repository>
+      <id>gitlab-maven</id>
+      <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
+    </repository>
+
+    <snapshotRepository>
+      <id>gitlab-maven</id>
+      <url>${env.CI_SERVER_URL}/api/v4/projects/${env.CI_PROJECT_ID}/packages/maven</url>
+    </snapshotRepository>
+  </distributionManagement>
+
+  <!-- Property resolution occurs only after parent POM has been resolved. Source: https://stackoverflow.com/a/59813598 -->
+  <repositories>
+    <!-- Explicitly define Maven central (first), so that CI job tries to fetch from it first. -->
+    <repository>
+      <snapshots>
+        <enabled>false</enabled>
+      </snapshots>
+      <id>central</id>
+      <name>Central Repository</name>
+      <url>https://repo.maven.apache.org/maven2</url>
+    </repository>
+  </repositories>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>io.quarkus</groupId>
+        <artifactId>quarkus-universe-bom</artifactId>
+        <version>${quarkus.platform.version}</version>
+        <type>pom</type>
+        <scope>import</scope>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-grpc</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-kubernetes</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-container-image-jib</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-kubernetes-service-binding</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-smallrye-health</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-resteasy-reactive</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-arc</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-config-yaml</artifactId>
+    </dependency>
+
+    <!-- Testing -->
+    <dependency>
+      <groupId>org.assertj</groupId>
+      <artifactId>assertj-core</artifactId>
+      <version>${assertj.version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.jacoco</groupId>
+      <artifactId>org.jacoco.agent</artifactId>
+      <classifier>runtime</classifier>
+      <scope>test</scope>
+      <version>${jacoco.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-junit5</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>io.quarkus</groupId>
+      <artifactId>quarkus-junit5-mockito</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+  </dependencies>
+
+  <build>
+      <plugins>
+
+        <plugin>
+          <artifactId>maven-assembly-plugin</artifactId>
+          <version>${maven-assembly-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-clean-plugin</artifactId>
+          <version>${maven-clean-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>${maven-compiler-plugin.version}</version>
+          <configuration>
+            <source>${java.version}</source>
+            <target>${java.version}</target>
+            <compilerArgs>
+              <arg>-Xlint:deprecation</arg>
+            </compilerArgs>
+          </configuration>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-deploy-plugin</artifactId>
+          <version>${maven-deploy-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-failsafe-plugin</artifactId>
+          <version>${maven-surefire-plugin.version}</version>
+          <configuration>
+            <systemPropertyVariables>
+              <jacoco-agent.destfile>${project.build.directory}/${jacoco.report.integration-test}</jacoco-agent.destfile>
+            </systemPropertyVariables>
+          </configuration>
+          <executions>
+            <execution>
+              <goals>
+                <goal>integration-test</goal>
+                <goal>verify</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-install-plugin</artifactId>
+          <version>${maven-install-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-jar-plugin</artifactId>
+          <version>${maven-jar-plugin.version}</version>
+          <configuration>
+            <archive>
+              <manifest>
+                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+              </manifest>
+            </archive>
+          </configuration>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-resources-plugin</artifactId>
+          <version>${maven-resources-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-surefire-plugin</artifactId>
+          <version>${maven-surefire-plugin.version}</version>
+          <configuration>
+            <skipTests>${skipUTs}</skipTests>
+            <systemPropertyVariables>
+              <jacoco-agent.destfile>${project.build.directory}/${jacoco.report.unit-test}</jacoco-agent.destfile>
+            </systemPropertyVariables>
+          </configuration>
+        </plugin>
+
+        <plugin>
+          <groupId>org.sonarsource.scanner.maven</groupId>
+          <artifactId>sonar-maven-plugin</artifactId>
+          <version>${sonarsource-scanner-plugin.version}</version>
+        </plugin>
+
+        <!-- https://quarkus.io/guides/maven-tooling#logging-quarkus-application-build-classpath-tree -->
+        <plugin>
+          <groupId>io.quarkus</groupId>
+          <artifactId>quarkus-bootstrap-maven-plugin</artifactId>
+          <version>${quarkus-maven-plugin.version}</version>
+        </plugin>
+
+        <plugin>
+          <groupId>io.quarkus</groupId>
+          <artifactId>quarkus-maven-plugin</artifactId>
+          <version>${quarkus-maven-plugin.version}</version>
+          <extensions>true</extensions>
+          <executions>
+            <execution>
+              <goals>
+                <goal>build</goal>
+                <goal>generate-code</goal>
+                <goal>generate-code-tests</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <groupId>org.jacoco</groupId>
+          <artifactId>jacoco-maven-plugin</artifactId>
+          <version>${jacoco.version}</version>
+          <executions>
+            <execution>
+              <id>instrument-unit-tests</id>
+              <phase>process-classes</phase>
+              <goals>
+                <goal>instrument</goal>
+              </goals>
+            </execution>
+            <execution>
+              <id>restore-unit-tests</id>
+              <phase>test</phase>
+              <goals>
+                <goal>restore-instrumented-classes</goal>
+              </goals>
+            </execution>
+            <execution>
+              <id>report-unit-tests</id>
+              <phase>test</phase>
+              <goals>
+                <goal>report</goal>
+              </goals>
+              <configuration>
+                <dataFile>${project.build.directory}/${jacoco.report.unit-test}</dataFile>
+                <outputDirectory>${project.reporting.outputDirectory}/jacoco-unit-tests</outputDirectory>
+              </configuration>
+            </execution>
+
+            <execution>
+              <id>instrument-integration-tests</id>
+              <phase>pre-integration-test</phase>
+              <goals>
+                <goal>instrument</goal>
+              </goals>
+            </execution>
+            <execution>
+              <id>restore-integration-tests</id>
+              <phase>post-integration-test</phase>
+              <goals>
+                <goal>restore-instrumented-classes</goal>
+              </goals>
+            </execution>
+
+            <execution>
+              <id>report-integration-tests</id>
+              <phase>post-integration-test</phase>
+              <goals>
+                <goal>report</goal>
+              </goals>
+              <configuration>
+                <dataFile>${project.build.directory}/${jacoco.report.integration-test}</dataFile>
+                <outputDirectory>${project.reporting.outputDirectory}/jacoco-integration-tests</outputDirectory>
+              </configuration>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-dependency-plugin</artifactId>
+          <version>${maven-dependency-plugin.version}</version>
+          <executions>
+            <execution>
+              <id>analyze-dependencies</id>
+              <goals>
+                <goal>analyze-only</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <artifactId>maven-enforcer-plugin</artifactId>
+          <version>${maven-enforcer-plugin.version}</version>
+          <configuration>
+            <rules>
+              <requireJavaVersion>
+                <version>${java.version}</version>
+              </requireJavaVersion>
+              <requireMavenVersion>
+                <version>${maven.version}</version>
+              </requireMavenVersion>
+            </rules>
+          </configuration>
+          <executions>
+            <execution>
+              <goals>
+                <goal>enforce</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+
+        <plugin>
+          <groupId>com.diffplug.spotless</groupId>
+          <artifactId>spotless-maven-plugin</artifactId>
+          <version>${spotless-plugin.version}</version>
+          <configuration>
+            <java>
+              <!--
+                  Allow toggling spotless, as per:
+                  https://github.com/diffplug/spotless/tree/main/plugin-maven#spotlessoff-and-spotlesson
+              -->
+              <toggleOffOn>
+                <off>fmt:off</off>
+                <on>fmt:on</on>
+              </toggleOffOn>
+
+              <googleJavaFormat>
+                <version>1.10.0</version>
+                <style>GOOGLE</style>
+              </googleJavaFormat>
+
+              <!-- Custom configuration -->
+              <indent>
+                <tabs>true</tabs>
+                <spacesPerTab>2</spacesPerTab>
+              </indent>
+              <indent>
+                <spaces>true</spaces>
+                <spacesPerTab>4</spacesPerTab>
+              </indent>
+            </java>
+          </configuration>
+          <executions>
+            <execution>
+              <phase>compile</phase>
+              <goals>
+                <goal>check</goal>
+              </goals>
+            </execution>
+          </executions>
+        </plugin>
+      </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>generate-consolidated-coverage</id>
+      <activation>
+        <activeByDefault>false</activeByDefault>
+      </activation>
+      <build>
+        <plugins>
+          <plugin>
+            <groupId>org.jacoco</groupId>
+            <artifactId>jacoco-maven-plugin</artifactId>
+            <executions>
+
+              <!--
+                Build consolidated coverage report as per
+                https://quarkus.io/version/1.11/guides/tests-with-coverage#instrumenting-the-classes-instead
+              -->
+              <execution>
+                <id>merge-results</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>merge</goal>
+                </goals>
+                <configuration>
+                  <fileSets>
+                    <fileSet>
+                      <directory>${project.build.directory}</directory>
+                      <includes>
+                        <include>*.exec</include>
+                      </includes>
+                    </fileSet>
+                  </fileSets>
+                  <destFile>${project.build.directory}/jacoco.exec</destFile>
+                </configuration>
+              </execution>
+
+              <execution>
+                <id>post-merge-report</id>
+                <phase>verify</phase>
+                <goals>
+                  <goal>report</goal>
+                </goals>
+                <configuration>
+                  <dataFile>${project.build.directory}/jacoco.exec</dataFile>
+                  <outputDirectory>${project.reporting.outputDirectory}/jacoco</outputDirectory>
+                </configuration>
+
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/src/automation/src/main/docker/Dockerfile.multistage.jvm b/src/automation/src/main/docker/Dockerfile.multistage.jvm
new file mode 100644
index 0000000000000000000000000000000000000000..696c8e18468b1cd57036d3f340f315cd69cc9333
--- /dev/null
+++ b/src/automation/src/main/docker/Dockerfile.multistage.jvm
@@ -0,0 +1,53 @@
+# Multi-stage Docker image build
+
+# Stage 1
+FROM maven:3-jdk-11 AS builder
+
+# Define working directory
+WORKDIR /app
+
+# Copy every file in working directory, as defined in .dockerignore file
+COPY ./pom.xml pom.xml
+COPY ./src src/
+COPY ./target/generated-sources/ target/generated-sources/
+RUN mvn --errors --batch-mode package -Dmaven.test.skip=true
+
+# Stage 2
+FROM builder AS unit-test
+
+RUN mvn --errors --batch-mode test
+
+# Stage 3
+FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 AS release
+
+ARG JAVA_PACKAGE=java-11-openjdk-headless
+ARG RUN_JAVA_VERSION=1.3.8
+ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
+# Install java and the run-java script
+# Also set up permissions for user `1001`
+RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
+    && microdnf update \
+    && microdnf clean all \
+    && mkdir /deployments \
+    && chown 1001 /deployments \
+    && chmod "g+rwX" /deployments \
+    && chown 1001:root /deployments \
+    && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
+    && chown 1001 /deployments/run-java.sh \
+    && chmod 540 /deployments/run-java.sh \
+    && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/conf/security/java.security
+
+# Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
+ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+# We make four distinct layers so if there are application changes the library layers can be re-used
+COPY --from=builder --chown=1001 /app/target/quarkus-app/lib/ /deployments/lib/
+COPY --from=builder --chown=1001 /app/target/quarkus-app/*.jar /deployments/
+COPY --from=builder --chown=1001 /app/target/quarkus-app/app/ /deployments/app/
+COPY --from=builder --chown=1001 /app/target/quarkus-app/quarkus/ /deployments/quarkus/
+
+EXPOSE 8080
+EXPOSE 9999
+USER 1001
+
+ENTRYPOINT [ "/deployments/run-java.sh" ]
+
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationGateway.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationGateway.java
new file mode 100644
index 0000000000000000000000000000000000000000..045ff44928a52f296ed8290b37eaf385857f52b6
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGateway.java
@@ -0,0 +1,5 @@
+package eu.teraflow.automation;
+
+import automation.AutomationService;
+
+public interface AutomationGateway extends AutomationService {}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..39c8ca6bbcf2ddca676c47e050628d600a4e13ff
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationGatewayImpl.java
@@ -0,0 +1,95 @@
+package eu.teraflow.automation;
+
+import automation.Automation;
+import context.ContextOuterClass;
+import eu.teraflow.automation.device.model.DeviceId;
+import eu.teraflow.automation.device.model.Uuid;
+import eu.teraflow.automation.model.DeviceRole;
+import eu.teraflow.automation.model.DeviceRoleId;
+import eu.teraflow.automation.model.DeviceRoleType;
+import io.quarkus.grpc.GrpcService;
+import io.smallrye.mutiny.Uni;
+import javax.inject.Inject;
+
+@GrpcService
+public class AutomationGatewayImpl implements AutomationGateway {
+
+    private final AutomationService automationService;
+
+    @Inject
+    public AutomationGatewayImpl(AutomationService automationService) {
+        this.automationService = automationService;
+    }
+
+    @Override
+    public Uni<Automation.DeviceRole> ztpGetDeviceRole(Automation.DeviceRoleId request) {
+        return Uni.createFrom()
+                .item(() -> Automation.DeviceRole.newBuilder().setDevRoleId(request).build());
+    }
+
+    @Override
+    public Uni<Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(
+            ContextOuterClass.DeviceId request) {
+        return Uni.createFrom().item(() -> Automation.DeviceRoleList.newBuilder().build());
+    }
+
+    @Override
+    public Uni<Automation.DeviceRoleState> ztpAdd(Automation.DeviceRole request) {
+
+        automationService.ztpAdd(getDeviceRole(request));
+
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Automation.DeviceRoleState.newBuilder()
+                                        .setDevRoleId(request.getDevRoleId())
+                                        .build());
+    }
+
+    @Override
+    public Uni<Automation.DeviceRoleState> ztpUpdate(Automation.DeviceRole request) {
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Automation.DeviceRoleState.newBuilder()
+                                        .setDevRoleId(request.getDevRoleId())
+                                        .build());
+    }
+
+    @Override
+    public Uni<Automation.DeviceRoleState> ztpDelete(Automation.DeviceRole request) {
+        return Uni.createFrom()
+                .item(
+                        () ->
+                                Automation.DeviceRoleState.newBuilder()
+                                        .setDevRoleId(request.getDevRoleId())
+                                        .build());
+    }
+
+    @Override
+    public Uni<Automation.DeviceRoleState> ztpDeleteAllByDeviceId(
+            ContextOuterClass.DeviceId request) {
+        return Uni.createFrom().item(() -> Automation.DeviceRoleState.newBuilder().build());
+    }
+
+    private DeviceRole getDeviceRole(Automation.DeviceRole deviceRole) {
+        final var OutDeviceId = deviceRole.getDevRoleId().getDevId().getDeviceUuid();
+
+        Uuid uuid = new Uuid(OutDeviceId.getUuid());
+        DeviceId deviceId = new DeviceId(uuid);
+
+        DeviceRoleId deviceRoleId = new DeviceRoleId(uuid, deviceId);
+
+        final var deviceRoleType = deviceRole.getDevRoleType();
+
+        if (deviceRoleType == Automation.DeviceRoleType.DEV_OPS) {
+            return new DeviceRole(deviceRoleId, DeviceRoleType.DEV_OPS);
+        } else if (deviceRoleType == Automation.DeviceRoleType.DEV_CONF) {
+            return new DeviceRole(deviceRoleId, DeviceRoleType.DEV_CONF);
+        } else if (deviceRoleType == Automation.DeviceRoleType.NONE) {
+            return new DeviceRole(deviceRoleId, DeviceRoleType.NONE);
+        } else {
+            return new DeviceRole(deviceRoleId, DeviceRoleType.PIPELINE_CONF);
+        }
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ff4265974faf385dc0ba17e2b020e32a290d171
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationService.java
@@ -0,0 +1,10 @@
+package eu.teraflow.automation;
+
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.model.DeviceRole;
+import io.smallrye.mutiny.Uni;
+
+public interface AutomationService {
+
+    Uni<Device> ztpAdd(DeviceRole deviceRole);
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee6fa8768831e7005afe2dcdf7d6b157d4865bbb
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/AutomationServiceImpl.java
@@ -0,0 +1,60 @@
+package eu.teraflow.automation;
+
+import eu.teraflow.automation.context.ContextService;
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.DeviceService;
+import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.model.DeviceRole;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import org.jboss.logging.Logger;
+
+@ApplicationScoped
+public class AutomationServiceImpl implements AutomationService {
+    private static final Logger LOGGER = Logger.getLogger(AutomationServiceImpl.class);
+
+    private final DeviceService deviceService;
+    private final ContextService contextService;
+
+    @Inject
+    public AutomationServiceImpl(DeviceService deviceService, ContextService contextService) {
+        this.deviceService = deviceService;
+        this.contextService = contextService;
+    }
+
+    @Override
+    public Uni<Device> ztpAdd(DeviceRole deviceRole) {
+
+        final var deviceUni = contextService.getDevice(deviceRole.getDeviceRoleId().getDeviceId());
+
+        deviceUni
+                .subscribe()
+                .with(
+                        device -> {
+                            if (!(device
+                                    .getDeviceOperationalStatus()
+                                    .toString()
+                                    .equals(DeviceOperationalStatus.ENABLED.toString()))) {
+
+                                final var initialConfig =
+                                        deviceService.getInitialConfiguration(
+                                                deviceRole.getDeviceRoleId().getDeviceId());
+
+                                device.setDeviceOperationalStatus(DeviceOperationalStatus.ENABLED);
+
+                                initialConfig
+                                        .subscribe()
+                                        .with(
+                                                deviceConfig -> {
+                                                    device.setDeviceConfiguration(deviceConfig);
+                                                    deviceService.configureDevice(device);
+
+                                                    LOGGER.infof("Received response %s", device);
+                                                });
+                            }
+                        });
+
+        return deviceUni;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/SimpleLivenessCheck.java b/src/automation/src/main/java/eu/teraflow/automation/SimpleLivenessCheck.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee4686b63ff9e90f0be8cda9cee4e363bf6d7507
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/SimpleLivenessCheck.java
@@ -0,0 +1,16 @@
+package eu.teraflow.automation;
+
+import javax.enterprise.context.ApplicationScoped;
+import org.eclipse.microprofile.health.HealthCheck;
+import org.eclipse.microprofile.health.HealthCheckResponse;
+import org.eclipse.microprofile.health.Liveness;
+
+@Liveness
+@ApplicationScoped
+public class SimpleLivenessCheck implements HealthCheck {
+
+    @Override
+    public HealthCheckResponse call() {
+        return HealthCheckResponse.up("Automation Service");
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..c27aec1363e000cea0bf9710d21fca79b796f9ae
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGateway.java
@@ -0,0 +1,10 @@
+package eu.teraflow.automation.context;
+
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.model.DeviceId;
+import io.smallrye.mutiny.Uni;
+
+public interface ContextGateway {
+
+    Uni<Device> getDevice(DeviceId deviceId);
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..bec35c9e5fd2f697f2c670b909348bc5039cc7ab
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextGatewayImpl.java
@@ -0,0 +1,62 @@
+package eu.teraflow.automation.context;
+
+import context.ContextOuterClass;
+import context.ContextService;
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.model.*;
+import io.quarkus.grpc.GrpcClient;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class ContextGatewayImpl implements ContextGateway {
+
+    @GrpcClient ContextService delegate;
+
+    @Override
+    public Uni<Device> getDevice(DeviceId deviceId) {
+        final var serializedDeviceId = getSerializedDeviceId(deviceId);
+        final var serializedDeviceUni = delegate.getDevice(serializedDeviceId);
+
+        return serializedDeviceUni.onItem().transform(this::getDevice);
+    }
+
+    private Device getDevice(ContextOuterClass.Device device) {
+
+        final var deviceId = getDeviceId(device.getDeviceId());
+        final var deviceType = getDeviceType(device.getDeviceType());
+        final var deviceOperationalStatus =
+                getDeviceOperationalStatus(device.getDeviceOperationalStatus());
+
+        return new Device(deviceId, deviceType, deviceOperationalStatus);
+    }
+
+    private DeviceId getDeviceId(ContextOuterClass.DeviceId deviceId) {
+        Uuid uuid = new Uuid(deviceId.getDeviceUuid().getUuid());
+        return new DeviceId(uuid);
+    }
+
+    private DeviceType getDeviceType(String deviceType) {
+        return new DeviceType(deviceType);
+    }
+
+    private DeviceOperationalStatus getDeviceOperationalStatus(
+            ContextOuterClass.DeviceOperationalStatusEnum deviceOperationalStatusEnum) {
+
+        if (deviceOperationalStatusEnum
+                == ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED) {
+            return DeviceOperationalStatus.ENABLED;
+        } else if (deviceOperationalStatusEnum
+                == ContextOuterClass.DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_DISABLED) {
+            return DeviceOperationalStatus.DISABLED;
+        } else {
+            return DeviceOperationalStatus.UNDEFINED;
+        }
+    }
+
+    private ContextOuterClass.DeviceId getSerializedDeviceId(DeviceId deviceId) {
+        final var deviceIdUuid =
+                ContextOuterClass.Uuid.newBuilder().setUuid(deviceId.toString()).build();
+        return ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build();
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..b51a49a5f3a768bb4d22fe23b700499ee6863d9b
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextService.java
@@ -0,0 +1,10 @@
+package eu.teraflow.automation.context;
+
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.model.DeviceId;
+import io.smallrye.mutiny.Uni;
+
+public interface ContextService {
+
+    Uni<Device> getDevice(DeviceId deviceId);
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..98a055a9003df59e25635ae5d69e08e30a09cc90
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/context/ContextServiceImpl.java
@@ -0,0 +1,24 @@
+package eu.teraflow.automation.context;
+
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.model.DeviceId;
+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<Device> getDevice(DeviceId deviceId) {
+
+        return contextGateway.getDevice(deviceId);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/Device.java b/src/automation/src/main/java/eu/teraflow/automation/device/Device.java
new file mode 100644
index 0000000000000000000000000000000000000000..d2abfee95e2b68239c6fbebfa4af2e0380c796cd
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/Device.java
@@ -0,0 +1,65 @@
+package eu.teraflow.automation.device;
+
+import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.device.model.DeviceId;
+import eu.teraflow.automation.device.model.DeviceOperationalStatus;
+import eu.teraflow.automation.device.model.DeviceType;
+
+public class Device {
+
+    private final DeviceId deviceId;
+    private final DeviceType deviceType;
+    private DeviceConfig deviceConfig;
+    private DeviceOperationalStatus deviceOperationalStatus;
+
+    public Device(
+            DeviceId deviceId,
+            DeviceType deviceType,
+            DeviceConfig deviceConfig,
+            DeviceOperationalStatus deviceOperationalStatus) {
+
+        this.deviceId = deviceId;
+        this.deviceType = deviceType;
+        this.deviceConfig = deviceConfig;
+        this.deviceOperationalStatus = deviceOperationalStatus;
+    }
+
+    public Device(
+            DeviceId deviceId, DeviceType deviceType, DeviceOperationalStatus deviceOperationalStatus) {
+
+        this.deviceId = deviceId;
+        this.deviceType = deviceType;
+        this.deviceOperationalStatus = deviceOperationalStatus;
+    }
+
+    public DeviceId getDeviceId() {
+        return deviceId;
+    }
+
+    public DeviceType getDeviceType() {
+        return deviceType;
+    }
+
+    public DeviceConfig getDeviceConfig() {
+        return deviceConfig;
+    }
+
+    public DeviceOperationalStatus getDeviceOperationalStatus() {
+        return deviceOperationalStatus;
+    }
+
+    public void setDeviceOperationalStatus(DeviceOperationalStatus status) {
+
+        this.deviceOperationalStatus = status;
+    }
+
+    public void setDeviceConfiguration(DeviceConfig deviceConfig) {
+
+        this.deviceConfig = deviceConfig;
+    }
+
+    public boolean isConfigured() {
+
+        return this.deviceOperationalStatus == DeviceOperationalStatus.ENABLED;
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..ed9a2961c4926aa5dfb66b17bfb1692a0cc37e68
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGateway.java
@@ -0,0 +1,11 @@
+package eu.teraflow.automation.device;
+
+import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.device.model.DeviceId;
+import io.smallrye.mutiny.Uni;
+
+public interface DeviceGateway {
+    Uni<DeviceConfig> getInitialConfiguration(DeviceId deviceId);
+
+    Uni<DeviceId> configureDevice(Device device);
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..38f79eee0d8d9f709a252be5ceb0a6a9e2a7c842
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceGatewayImpl.java
@@ -0,0 +1,137 @@
+package eu.teraflow.automation.device;
+
+import context.ContextOuterClass;
+import context.ContextOuterClass.DeviceConfig;
+import context.ContextOuterClass.Uuid;
+import device.DeviceService;
+import eu.teraflow.automation.device.model.*;
+import io.quarkus.grpc.GrpcClient;
+import io.smallrye.mutiny.Uni;
+import java.util.ArrayList;
+import java.util.List;
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class DeviceGatewayImpl implements DeviceGateway {
+
+    @GrpcClient DeviceService deviceDelegate;
+
+    @Override
+    public Uni<eu.teraflow.automation.device.model.DeviceConfig> getInitialConfiguration(
+            DeviceId deviceId) {
+        final var serializedId = getSerializedDeviceId(deviceId);
+        final var serializedDeviceConfigUni = deviceDelegate.getInitialConfig(serializedId);
+
+        return serializedDeviceConfigUni.onItem().transform(this::getDeviceConfig);
+    }
+
+    @Override
+    public Uni<DeviceId> configureDevice(Device device) {
+        final var deviceBuilder = ContextOuterClass.Device.newBuilder();
+
+        final var serializedId = getSerializedDeviceId(device.getDeviceId());
+        deviceBuilder.setDeviceId(serializedId);
+
+        final var serializedConfigUni = getSerializedConfigUni(device.getDeviceConfig());
+        final var serializedConfig = serializedConfigUni.await().indefinitely();
+        deviceBuilder.setDeviceConfig(serializedConfig);
+
+        final var serializedDevice = deviceBuilder.build();
+        final var deviceIdUni = deviceDelegate.configureDevice(serializedDevice);
+
+        return deviceIdUni.onItem().transform(this::getDeviceId);
+    }
+
+    private List<ContextOuterClass.ConfigRule> getSerializedConfigRule(
+            List<ConfigRule> configRuleList) {
+
+        List<ContextOuterClass.ConfigRule> serializedConfigRuleList = new ArrayList<>();
+        for (ConfigRule item : configRuleList) {
+            final var configActionEnum = getSerializedConfigActionEnum(item.getConfigActionEnum());
+            final var resourceKey = item.getResourceKey();
+            final var resourceValue = item.getResourceValue();
+            final var serializedConfigRule =
+                    ContextOuterClass.ConfigRule.newBuilder()
+                            .setAction(configActionEnum)
+                            .setResourceKey(resourceKey)
+                            .setResourceValue(resourceValue)
+                            .build();
+            serializedConfigRuleList.add(serializedConfigRule);
+        }
+        return serializedConfigRuleList;
+    }
+
+    private ContextOuterClass.ConfigActionEnum getSerializedConfigActionEnum(
+            ConfigActionEnum configActionEnum) {
+
+        if (configActionEnum == ConfigActionEnum.SET) {
+            return ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET;
+        } else if (configActionEnum == ConfigActionEnum.UNDEFINED) {
+            return ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED;
+        } else {
+            return ContextOuterClass.ConfigActionEnum.CONFIGACTION_DELETE;
+        }
+    }
+
+    private ConfigActionEnum getConfigActionEnum(
+            ContextOuterClass.ConfigActionEnum configActionEnum) {
+
+        if (configActionEnum == ContextOuterClass.ConfigActionEnum.CONFIGACTION_SET) {
+            return ConfigActionEnum.SET;
+        } else if (configActionEnum == ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED) {
+            return ConfigActionEnum.UNDEFINED;
+        } else {
+            return ConfigActionEnum.DELETE;
+        }
+    }
+
+    private ContextOuterClass.DeviceId getSerializedDeviceId(DeviceId deviceId) {
+        final var deviceIdUuid = Uuid.newBuilder().setUuid(deviceId.toString()).build();
+        return ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(deviceIdUuid).build();
+    }
+
+    private DeviceId getDeviceId(ContextOuterClass.DeviceId deviceId) {
+        eu.teraflow.automation.device.model.Uuid uuid =
+                new eu.teraflow.automation.device.model.Uuid(deviceId.getDeviceUuid().getUuid());
+        return new DeviceId(uuid);
+    }
+
+    private eu.teraflow.automation.device.model.DeviceConfig getDeviceConfig(
+            ContextOuterClass.DeviceConfig deviceConfig) {
+
+        final var serializedConfigRuleList = deviceConfig.getConfigRulesList();
+        final var configRuleList = getConfigRuleList(serializedConfigRuleList);
+        return new eu.teraflow.automation.device.model.DeviceConfig(configRuleList);
+    }
+
+    private List<ConfigRule> getConfigRuleList(
+            List<ContextOuterClass.ConfigRule> serializedConfigRuleList) {
+
+        List<ConfigRule> configRuleList = new ArrayList<>();
+
+        for (ContextOuterClass.ConfigRule item : serializedConfigRuleList) {
+
+            ConfigRule configRule =
+                    new ConfigRule(
+                            getConfigActionEnum(item.getAction()),
+                            item.getResourceKey(),
+                            item.getResourceValue());
+            configRuleList.add(configRule);
+        }
+        return configRuleList;
+    }
+
+    private Uni<DeviceConfig> getSerializedConfigUni(
+            eu.teraflow.automation.device.model.DeviceConfig deviceConfig) {
+
+        final var serializedDeviceConfig = DeviceConfig.newBuilder();
+
+        final var configRuleList = deviceConfig.getConfigRules();
+        final var serializedConfigRuleList = getSerializedConfigRule(configRuleList);
+        for (int i = 0; i < serializedConfigRuleList.size(); i++) {
+            serializedDeviceConfig.setConfigRules(i, serializedConfigRuleList.get(i));
+        }
+
+        return Uni.createFrom().item(serializedDeviceConfig.build());
+    }
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..0ada5cde27c779e13e0f0df745c7ac118576505e
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceService.java
@@ -0,0 +1,12 @@
+package eu.teraflow.automation.device;
+
+import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.device.model.DeviceId;
+import io.smallrye.mutiny.Uni;
+
+public interface DeviceService {
+
+    Uni<DeviceConfig> getInitialConfiguration(DeviceId deviceId);
+
+    Uni<DeviceId> configureDevice(Device device);
+}
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
new file mode 100644
index 0000000000000000000000000000000000000000..57c118255f3850f6f0f860c280fc88ac603a8c61
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/DeviceServiceImpl.java
@@ -0,0 +1,30 @@
+package eu.teraflow.automation.device;
+
+import eu.teraflow.automation.device.model.DeviceConfig;
+import eu.teraflow.automation.device.model.DeviceId;
+import io.smallrye.mutiny.Uni;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+
+@ApplicationScoped
+public class DeviceServiceImpl implements DeviceService {
+
+    private final DeviceGateway deviceGateway;
+
+    @Inject
+    public DeviceServiceImpl(DeviceGateway deviceGateway) {
+        this.deviceGateway = deviceGateway;
+    }
+
+    @Override
+    public Uni<DeviceConfig> getInitialConfiguration(DeviceId deviceId) {
+
+        return deviceGateway.getInitialConfiguration(deviceId);
+    }
+
+    @Override
+    public Uni<DeviceId> configureDevice(Device device) {
+
+        return deviceGateway.configureDevice(device);
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..286bae16da5187bdfc09dabdd2a0e1681f46c0d3
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigActionEnum.java
@@ -0,0 +1,7 @@
+package eu.teraflow.automation.device.model;
+
+public enum ConfigActionEnum {
+    UNDEFINED,
+    SET,
+    DELETE
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java
new file mode 100644
index 0000000000000000000000000000000000000000..7c9eecd684c40f400df480f7511881da058944e4
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/ConfigRule.java
@@ -0,0 +1,26 @@
+package eu.teraflow.automation.device.model;
+
+public class ConfigRule {
+
+    private ConfigActionEnum configActionEnum;
+    private String resourceKey;
+    private String resourceValue;
+
+    public ConfigRule(ConfigActionEnum configActionEnum, String resourceKey, String resourceValue) {
+        this.configActionEnum = configActionEnum;
+        this.resourceKey = resourceKey;
+        this.resourceValue = resourceValue;
+    }
+
+    public ConfigActionEnum getConfigActionEnum() {
+        return configActionEnum;
+    }
+
+    public String getResourceKey() {
+        return resourceKey;
+    }
+
+    public String getResourceValue() {
+        return resourceValue;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..c70e743dcba0a05a4962e5c113115ce0d0bf7c95
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceConfig.java
@@ -0,0 +1,17 @@
+package eu.teraflow.automation.device.model;
+
+import java.util.List;
+
+public class DeviceConfig {
+
+    private List<ConfigRule> configRules;
+
+    public DeviceConfig(List<ConfigRule> configRules) {
+
+        this.configRules = configRules;
+    }
+
+    public List<ConfigRule> getConfigRules() {
+        return configRules;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceId.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceId.java
new file mode 100644
index 0000000000000000000000000000000000000000..b52672631c764b73266c74b36830c6c2c6a2d713
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceId.java
@@ -0,0 +1,13 @@
+package eu.teraflow.automation.device.model;
+
+public class DeviceId {
+    private Uuid id;
+
+    public DeviceId(Uuid id) {
+        this.id = id;
+    }
+
+    public Uuid getId() {
+        return id;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java
new file mode 100644
index 0000000000000000000000000000000000000000..11e0c1b7154192b2f1595b23f7b4bf9d259af784
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceOperationalStatus.java
@@ -0,0 +1,7 @@
+package eu.teraflow.automation.device.model;
+
+public enum DeviceOperationalStatus {
+    UNDEFINED,
+    DISABLED,
+    ENABLED
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceType.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceType.java
new file mode 100644
index 0000000000000000000000000000000000000000..2d61875d41ac98fad4aa80147910e4cdd1a869d7
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/DeviceType.java
@@ -0,0 +1,14 @@
+package eu.teraflow.automation.device.model;
+
+public class DeviceType {
+    String deviceType;
+
+    public DeviceType(String deviceType) {
+
+        this.deviceType = deviceType;
+    }
+
+    public String getDeviceType() {
+        return deviceType;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/device/model/Uuid.java b/src/automation/src/main/java/eu/teraflow/automation/device/model/Uuid.java
new file mode 100644
index 0000000000000000000000000000000000000000..0a58ee6a8db3696dd14600094ddfa42ac10e3058
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/device/model/Uuid.java
@@ -0,0 +1,14 @@
+package eu.teraflow.automation.device.model;
+
+public class Uuid {
+
+    private String id;
+
+    public Uuid(String id) {
+        this.id = id;
+    }
+
+    public String getId() {
+        return id;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
new file mode 100644
index 0000000000000000000000000000000000000000..8706cad56b5b6efba6a3d585bb898340af8377ed
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRole.java
@@ -0,0 +1,21 @@
+package eu.teraflow.automation.model;
+
+public class DeviceRole {
+
+    private final DeviceRoleId id;
+    private final DeviceRoleType type;
+
+    public DeviceRole(DeviceRoleId id, DeviceRoleType type) {
+
+        this.id = id;
+        this.type = type;
+    }
+
+    public DeviceRoleId getDeviceRoleId() {
+        return id;
+    }
+
+    public DeviceRoleType getType() {
+        return type;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
new file mode 100644
index 0000000000000000000000000000000000000000..d795fed4a1b0ae1d7edf12d835c3ae3df9b6bb45
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleId.java
@@ -0,0 +1,23 @@
+package eu.teraflow.automation.model;
+
+import eu.teraflow.automation.device.model.DeviceId;
+import eu.teraflow.automation.device.model.Uuid;
+
+public class DeviceRoleId {
+
+    private final Uuid devRoleId;
+    private final DeviceId deviceId;
+
+    public DeviceRoleId(Uuid devRoleId, DeviceId deviceId) {
+        this.devRoleId = devRoleId;
+        this.deviceId = deviceId;
+    }
+
+    public Uuid getDevRoleId() {
+        return devRoleId;
+    }
+
+    public DeviceId getDeviceId() {
+        return deviceId;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleState.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleState.java
new file mode 100644
index 0000000000000000000000000000000000000000..71c5757d69f94c2d92df2c94fcd2fbf89ba33950
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleState.java
@@ -0,0 +1,21 @@
+package eu.teraflow.automation.model;
+
+public class DeviceRoleState {
+
+    private final DeviceRoleId deviceRoleId;
+    private final DeviceState deviceState;
+
+    public DeviceRoleState(DeviceRoleId deviceRoleId, DeviceState deviceState) {
+
+        this.deviceRoleId = deviceRoleId;
+        this.deviceState = deviceState;
+    }
+
+    public DeviceRoleId getDeviceRoleId() {
+        return deviceRoleId;
+    }
+
+    public DeviceState getDeviceState() {
+        return deviceState;
+    }
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleType.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleType.java
new file mode 100644
index 0000000000000000000000000000000000000000..411f9eb603ac9f5e4d737e2697755bfc206322d4
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceRoleType.java
@@ -0,0 +1,8 @@
+package eu.teraflow.automation.model;
+
+public enum DeviceRoleType {
+    NONE,
+    DEV_OPS,
+    DEV_CONF,
+    PIPELINE_CONF
+}
diff --git a/src/automation/src/main/java/eu/teraflow/automation/model/DeviceState.java b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceState.java
new file mode 100644
index 0000000000000000000000000000000000000000..8660baa956f861f5a1e0876b63a2de01d53dabb1
--- /dev/null
+++ b/src/automation/src/main/java/eu/teraflow/automation/model/DeviceState.java
@@ -0,0 +1,9 @@
+package eu.teraflow.automation.model;
+
+public enum DeviceState {
+    PLANNED,
+    POTENCIAL_AVAILABLE,
+    POTENCIAL_BUSY,
+    INSTALLED,
+    PENDING_REMOVAL
+}
diff --git a/src/automation/src/main/proto/automation.proto b/src/automation/src/main/proto/automation.proto
new file mode 120000
index 0000000000000000000000000000000000000000..afef7a8e47ec5688ec46498c2197bc345e6c5e92
--- /dev/null
+++ b/src/automation/src/main/proto/automation.proto
@@ -0,0 +1 @@
+../../../../../proto/automation.proto
\ No newline at end of file
diff --git a/src/automation/src/main/proto/context.proto b/src/automation/src/main/proto/context.proto
new file mode 120000
index 0000000000000000000000000000000000000000..7f33c4bc783bd20d031d94ab3b2e94f0d76ecd95
--- /dev/null
+++ b/src/automation/src/main/proto/context.proto
@@ -0,0 +1 @@
+../../../../../proto/context.proto
\ No newline at end of file
diff --git a/src/automation/src/main/proto/device.proto b/src/automation/src/main/proto/device.proto
new file mode 120000
index 0000000000000000000000000000000000000000..ad6e7c47eb9fb50c5cc8a7b3562caaf933ba0469
--- /dev/null
+++ b/src/automation/src/main/proto/device.proto
@@ -0,0 +1 @@
+../../../../../proto/device.proto
\ No newline at end of file
diff --git a/src/automation/src/main/resources/application.yaml b/src/automation/src/main/resources/application.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2bacf507e453893b1130d2af3c6a989d95eda40d
--- /dev/null
+++ b/src/automation/src/main/resources/application.yaml
@@ -0,0 +1,31 @@
+quarkus:
+  grpc:
+    server:
+      port: 9999
+      enable-reflection-service: true
+  http:
+    port: 8080
+  container-image:
+    group: teraflow-h2020
+    name: controller/automation
+    tag: 0.0.1
+    registry: registry.gitlab.com
+  kubernetes:
+    name: automationservice
+    image-pull-policy: Always
+    service-type: NodePort
+    labels:
+      app: automationservice
+    readiness-probe:
+      initial-delay: 5s
+      period: 45s
+    liveness-probe:
+      initial-delay: 5s
+      period: 45s
+    ports:
+      http:
+        host-port: 8080
+        container-port: 8080
+      grpc-server:
+        host-port: 9999
+        container-port: 9999
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..92f9dd3f45031b9a58c07e6d08c7a867155fa742
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationFunctionalServiceTest.java
@@ -0,0 +1,163 @@
+package eu.teraflow.automation;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+
+import automation.Automation;
+import context.ContextOuterClass;
+import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.DeviceGateway;
+import eu.teraflow.automation.device.model.*;
+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 io.quarkus.test.junit.mockito.InjectMock;
+import io.smallrye.mutiny.Uni;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import javax.inject.Inject;
+import org.assertj.core.api.Assertions;
+import org.jboss.logging.Logger;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+@QuarkusTest
+public class AutomationFunctionalServiceTest {
+    private static final Logger LOGGER = Logger.getLogger(AutomationFunctionalServiceTest.class);
+
+    @Inject AutomationService automationService;
+
+    @InjectMock DeviceGateway deviceGateway;
+    @InjectMock ContextGateway contextGateway;
+
+    @Test
+    void shouldConfigureDevice() {
+
+        final var uuidForDeviceRoleId =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+
+        final var uuidForDeviceId =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("9f14d0ab-9608-7862-a9e4-5ed26688389c").toString())
+                        .build();
+
+        final var outDeviceId =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuidForDeviceId).build();
+
+        final var outDeviceRoleId =
+                Automation.DeviceRoleId.newBuilder()
+                        .setDevRoleId(uuidForDeviceRoleId)
+                        .setDevId(outDeviceId)
+                        .build();
+
+        Uuid uuid = new Uuid(outDeviceRoleId.getDevId().toString());
+        DeviceId deviceId = new DeviceId(uuid);
+        DeviceType deviceType = new DeviceType("cisco");
+
+        ConfigRule configRule1 = new ConfigRule(ConfigActionEnum.UNDEFINED, "001", "100");
+        ConfigRule configRule2 = new ConfigRule(ConfigActionEnum.SET, "002", "101");
+        List<ConfigRule> configRuleList = new ArrayList<>();
+        configRuleList.add(configRule1);
+        configRuleList.add(configRule2);
+
+        DeviceConfig expectedDeviceConfig = new DeviceConfig(configRuleList);
+        Uni<DeviceConfig> expectedDeviceConfigUni = Uni.createFrom().item(expectedDeviceConfig);
+        Uni<DeviceId> expectedDeviceId = Uni.createFrom().item(deviceId);
+
+        DeviceRoleId deviceRoleId = new DeviceRoleId(uuid, deviceId);
+
+        DeviceRole deviceRole = new DeviceRole(deviceRoleId, DeviceRoleType.DEV_CONF);
+
+        Device device = new Device(deviceId, deviceType, DeviceOperationalStatus.DISABLED);
+        Uni<Device> deviceUni = Uni.createFrom().item(device);
+
+        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni);
+        Mockito.when(deviceGateway.getInitialConfiguration(Mockito.any()))
+                .thenReturn(expectedDeviceConfigUni);
+        Mockito.when(deviceGateway.configureDevice(Mockito.any())).thenReturn(expectedDeviceId);
+
+        final var currentDevice = automationService.ztpAdd(deviceRole);
+
+        Assertions.assertThat(currentDevice).isNotNull();
+        currentDevice
+                .subscribe()
+                .with(
+                        deviceConfig -> {
+                            LOGGER.infof("Received response %s", deviceConfig);
+                            assertThat(deviceConfig.getDeviceOperationalStatus().toString())
+                                    .isEqualTo(device.getDeviceOperationalStatus().toString());
+                            assertThat(deviceConfig.getDeviceConfig().toString()).isNotNull();
+                            assertThat(deviceConfig.getDeviceConfig().toString())
+                                    .isEqualTo(expectedDeviceConfig.toString());
+                            assertThat(deviceConfig.getDeviceId().getId()).isEqualTo(deviceId.getId());
+                        });
+    }
+
+    @Test
+    void shouldNotConfigureDevice() {
+
+        final var uuidForDeviceRoleId =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("2f14d0ab-9608-7862-a9e4-5ed26688389f").toString())
+                        .build();
+
+        final var uuidForDeviceId =
+                ContextOuterClass.Uuid.newBuilder()
+                        .setUuid(UUID.fromString("3f14d0ab-9608-7862-a9e4-5ed26688389d").toString())
+                        .build();
+
+        final var outDeviceId =
+                ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuidForDeviceId).build();
+
+        final var outDeviceRoleId =
+                Automation.DeviceRoleId.newBuilder()
+                        .setDevRoleId(uuidForDeviceRoleId)
+                        .setDevId(outDeviceId)
+                        .build();
+
+        Uuid uuid = new Uuid(outDeviceRoleId.getDevId().toString());
+        DeviceId deviceId = new DeviceId(uuid);
+        DeviceType deviceType = new DeviceType("ztp");
+
+        List<ConfigRule> configRuleList = new ArrayList<>();
+
+        ConfigRule configRule1 =
+                new ConfigRule(ConfigActionEnum.UNDEFINED, "001", "already-configured");
+        configRuleList.add(configRule1);
+
+        DeviceConfig expectedDeviceConfig = new DeviceConfig(configRuleList);
+
+        Uuid devRoleIdUuid = new Uuid(outDeviceRoleId.getDevRoleId().getUuid());
+        DeviceRoleId deviceRoleId = new DeviceRoleId(devRoleIdUuid, deviceId);
+
+        DeviceRole deviceRole = new DeviceRole(deviceRoleId, DeviceRoleType.PIPELINE_CONF);
+
+        Device device =
+                new Device(deviceId, deviceType, expectedDeviceConfig, DeviceOperationalStatus.ENABLED);
+
+        Uni<Device> deviceUni = Uni.createFrom().item(device);
+        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni);
+
+        final var currentDevice = automationService.ztpAdd(deviceRole);
+
+        Assertions.assertThat(currentDevice).isNotNull();
+
+        currentDevice
+                .subscribe()
+                .with(
+                        deviceConfig -> {
+                            LOGGER.infof("Received response %s", deviceConfig);
+                            assertThat(deviceConfig.getDeviceOperationalStatus().toString())
+                                    .isEqualTo(device.getDeviceOperationalStatus().toString());
+                            assertThat(deviceConfig.getDeviceConfig().toString()).isNotNull();
+                            assertThat(deviceConfig.getDeviceConfig().toString())
+                                    .isEqualTo(expectedDeviceConfig.toString());
+                            assertThat(deviceConfig.getDeviceId().getId().toString())
+                                    .isEqualTo(deviceId.getId().toString());
+                        });
+    }
+}
diff --git a/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..51d6f850fbafb3954bdf869b900be6c1b68ae275
--- /dev/null
+++ b/src/automation/src/test/java/eu/teraflow/automation/AutomationServiceTest.java
@@ -0,0 +1,197 @@
+package eu.teraflow.automation;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import automation.Automation.DeviceRole;
+import automation.Automation.DeviceRoleId;
+import automation.AutomationService;
+import context.ContextOuterClass;
+import context.ContextOuterClass.Uuid;
+import eu.teraflow.automation.context.ContextGateway;
+import eu.teraflow.automation.device.Device;
+import eu.teraflow.automation.device.DeviceGateway;
+import eu.teraflow.automation.device.model.*;
+import io.quarkus.grpc.GrpcClient;
+import io.quarkus.test.junit.QuarkusTest;
+import io.quarkus.test.junit.mockito.InjectMock;
+import io.smallrye.mutiny.Uni;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import org.jboss.logging.Logger;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+@QuarkusTest
+class AutomationServiceTest {
+    private static final Logger LOGGER = Logger.getLogger(AutomationServiceTest.class);
+
+    @GrpcClient AutomationService client;
+
+    @InjectMock DeviceGateway deviceGateway;
+    @InjectMock ContextGateway contextGateway;
+
+    @Test
+    void shouldAddDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var serializedUuid =
+                Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9608-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(serializedUuid).build();
+        final var deviceRole = DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build();
+
+        eu.teraflow.automation.device.model.Uuid uuid =
+                new eu.teraflow.automation.device.model.Uuid(deviceRoleId.getDevId().toString());
+        DeviceId deviceId = new DeviceId(uuid);
+        DeviceType deviceType = new DeviceType("ztp");
+
+        List<ConfigRule> configRuleList = new ArrayList<>();
+
+        ConfigRule configRule1 =
+                new ConfigRule(ConfigActionEnum.UNDEFINED, "001", "initial-configuration");
+        configRuleList.add(configRule1);
+
+        DeviceConfig deviceConfig = new DeviceConfig(configRuleList);
+        //        Uni<DeviceConfig> deviceConfigUni = Uni.createFrom().item(deviceConfig);
+        Uni<DeviceId> expectedDeviceId = Uni.createFrom().item(deviceId);
+
+        DeviceConfig expectedDeviceConfig = new DeviceConfig(configRuleList);
+        Uni<DeviceConfig> expectedDeviceConfigUni = Uni.createFrom().item(expectedDeviceConfig);
+
+        Device device =
+                new Device(deviceId, deviceType, deviceConfig, DeviceOperationalStatus.DISABLED);
+        Uni<Device> deviceUni = Uni.createFrom().item(device);
+
+        Mockito.when(contextGateway.getDevice(Mockito.any())).thenReturn(deviceUni);
+        Mockito.when(deviceGateway.getInitialConfiguration(Mockito.any()))
+                .thenReturn(expectedDeviceConfigUni);
+        Mockito.when(deviceGateway.configureDevice(Mockito.any())).thenReturn(expectedDeviceId);
+
+        client
+                .ztpAdd(deviceRole)
+                .subscribe()
+                .with(
+                        deviceRoleState -> {
+                            LOGGER.infof("Received response %s", deviceRoleState);
+                            message.complete(deviceRoleState.getDevRoleId().getDevRoleId().toString());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEqualTo(deviceRoleId.getDevRoleId().toString());
+    }
+
+    @Test
+    void shouldUpdateDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9605-7862-a9e4-5ed26688389b").toString())
+                        .build();
+        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
+        final var deviceRole = DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build();
+
+        client
+                .ztpUpdate(deviceRole)
+                .subscribe()
+                .with(
+                        deviceRoleState -> {
+                            LOGGER.infof("Received response %s", deviceRoleState);
+                            message.complete(deviceRoleState.getDevRoleId().toString());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).contains("0f14d0ab-9605-7862-a9e4-5ed26688389b");
+    }
+
+    @Test
+    void shouldGetDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
+
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9605-4a62-a5c4-5ed26688389b").toString())
+                        .build();
+        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
+
+        client
+                .ztpGetDeviceRole(deviceRoleId)
+                .subscribe()
+                .with(
+                        deviceRole -> {
+                            LOGGER.infof("Received response %s", deviceRole);
+                            message.complete(deviceRole.getDevRoleId().toString());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).contains("0f14d0ab-9605-4a62-a5c4-5ed26688389b");
+    }
+
+    @Test
+    void shouldGetAllDeviceRolesByDeviceId()
+            throws ExecutionException, InterruptedException, TimeoutException {
+
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                Uuid.newBuilder()
+                        .setUuid(UUID.fromString("1b14d0ab-9605-4a62-a9e4-5ed26688389b").toString())
+                        .build();
+        final var deviceId = ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuid).build();
+
+        client
+                .ztpGetDeviceRolesByDeviceId(deviceId)
+                .subscribe()
+                .with(
+                        deviceRoleList -> {
+                            LOGGER.infof("Received response %s", deviceRoleList);
+                            message.complete(deviceRoleList.toString());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEmpty();
+    }
+
+    @Test
+    void shouldDeleteDeviceRole() throws ExecutionException, InterruptedException, TimeoutException {
+        CompletableFuture<String> message = new CompletableFuture<>();
+        final var uuid =
+                Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0c15d0ab-9605-4a62-a5c4-5ed26688389b").toString())
+                        .build();
+        final var deviceRoleId = DeviceRoleId.newBuilder().setDevRoleId(uuid).build();
+        final var deviceRole = DeviceRole.newBuilder().setDevRoleId(deviceRoleId).build();
+
+        client
+                .ztpDelete(deviceRole)
+                .subscribe()
+                .with(
+                        deviceRoleState -> {
+                            LOGGER.infof("Received response %s", deviceRoleState);
+                            message.complete(deviceRoleState.getDevRoleId().toString());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).contains("0c15d0ab-9605-4a62-a5c4-5ed26688389b");
+    }
+
+    @Test
+    void shouldDeleteAllDevicesRolesByDeviceId()
+            throws ExecutionException, InterruptedException, TimeoutException {
+
+        CompletableFuture<String> message = new CompletableFuture<>();
+
+        final var uuid =
+                Uuid.newBuilder()
+                        .setUuid(UUID.fromString("0f14d0ab-9605-4a62-a9e4-5ed26688389b").toString())
+                        .build();
+        final var deviceId = ContextOuterClass.DeviceId.newBuilder().setDeviceUuid(uuid).build();
+
+        client
+                .ztpDeleteAllByDeviceId(deviceId)
+                .subscribe()
+                .with(
+                        deviceRoleState -> {
+                            LOGGER.infof("Received response %s", deviceRoleState);
+                            message.complete(deviceRoleState.getDevRoleId().toString());
+                        });
+        assertThat(message.get(5, TimeUnit.SECONDS)).isEmpty();
+    }
+}
diff --git a/src/automation/target/generated-sources/grpc/automation/Automation.java b/src/automation/target/generated-sources/grpc/automation/Automation.java
new file mode 100644
index 0000000000000000000000000000000000000000..c749d05a36d749bd15d05c8388517030fe951a82
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/automation/Automation.java
@@ -0,0 +1,3441 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: automation.proto
+
+package automation;
+
+public final class Automation {
+  private Automation() {}
+  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 automation.DeviceRoleType}
+   */
+  public enum DeviceRoleType
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>NONE = 0;</code>
+     */
+    NONE(0),
+    /**
+     * <code>DEV_OPS = 1;</code>
+     */
+    DEV_OPS(1),
+    /**
+     * <code>DEV_CONF = 2;</code>
+     */
+    DEV_CONF(2),
+    /**
+     * <code>PIPELINE_CONF = 3;</code>
+     */
+    PIPELINE_CONF(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>NONE = 0;</code>
+     */
+    public static final int NONE_VALUE = 0;
+    /**
+     * <code>DEV_OPS = 1;</code>
+     */
+    public static final int DEV_OPS_VALUE = 1;
+    /**
+     * <code>DEV_CONF = 2;</code>
+     */
+    public static final int DEV_CONF_VALUE = 2;
+    /**
+     * <code>PIPELINE_CONF = 3;</code>
+     */
+    public static final int PIPELINE_CONF_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 DeviceRoleType 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 DeviceRoleType forNumber(int value) {
+      switch (value) {
+        case 0: return NONE;
+        case 1: return DEV_OPS;
+        case 2: return DEV_CONF;
+        case 3: return PIPELINE_CONF;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<DeviceRoleType>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        DeviceRoleType> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<DeviceRoleType>() {
+            public DeviceRoleType findValueByNumber(int number) {
+              return DeviceRoleType.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 automation.Automation.getDescriptor().getEnumTypes().get(0);
+    }
+
+    private static final DeviceRoleType[] VALUES = values();
+
+    public static DeviceRoleType 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 DeviceRoleType(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:automation.DeviceRoleType)
+  }
+
+  /**
+   * Protobuf enum {@code automation.ZtpDeviceState}
+   */
+  public enum ZtpDeviceState
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>PLANNED = 0;</code>
+     */
+    PLANNED(0),
+    /**
+     * <code>POTENCIAL_AVAILABLE = 1;</code>
+     */
+    POTENCIAL_AVAILABLE(1),
+    /**
+     * <code>POTENCIAL_BUSY = 2;</code>
+     */
+    POTENCIAL_BUSY(2),
+    /**
+     * <code>INSTALLED = 3;</code>
+     */
+    INSTALLED(3),
+    /**
+     * <code>PENDING_REMOVAL = 4;</code>
+     */
+    PENDING_REMOVAL(4),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>PLANNED = 0;</code>
+     */
+    public static final int PLANNED_VALUE = 0;
+    /**
+     * <code>POTENCIAL_AVAILABLE = 1;</code>
+     */
+    public static final int POTENCIAL_AVAILABLE_VALUE = 1;
+    /**
+     * <code>POTENCIAL_BUSY = 2;</code>
+     */
+    public static final int POTENCIAL_BUSY_VALUE = 2;
+    /**
+     * <code>INSTALLED = 3;</code>
+     */
+    public static final int INSTALLED_VALUE = 3;
+    /**
+     * <code>PENDING_REMOVAL = 4;</code>
+     */
+    public static final int PENDING_REMOVAL_VALUE = 4;
+
+
+    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 ZtpDeviceState 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 ZtpDeviceState forNumber(int value) {
+      switch (value) {
+        case 0: return PLANNED;
+        case 1: return POTENCIAL_AVAILABLE;
+        case 2: return POTENCIAL_BUSY;
+        case 3: return INSTALLED;
+        case 4: return PENDING_REMOVAL;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ZtpDeviceState>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ZtpDeviceState> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ZtpDeviceState>() {
+            public ZtpDeviceState findValueByNumber(int number) {
+              return ZtpDeviceState.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 automation.Automation.getDescriptor().getEnumTypes().get(1);
+    }
+
+    private static final ZtpDeviceState[] VALUES = values();
+
+    public static ZtpDeviceState 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 ZtpDeviceState(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:automation.ZtpDeviceState)
+  }
+
+  public interface DeviceRoleIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:automation.DeviceRoleId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid devRoleId = 1;</code>
+     * @return Whether the devRoleId field is set.
+     */
+    boolean hasDevRoleId();
+    /**
+     * <code>.context.Uuid devRoleId = 1;</code>
+     * @return The devRoleId.
+     */
+    context.ContextOuterClass.Uuid getDevRoleId();
+    /**
+     * <code>.context.Uuid devRoleId = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getDevRoleIdOrBuilder();
+
+    /**
+     * <code>.context.DeviceId devId = 2;</code>
+     * @return Whether the devId field is set.
+     */
+    boolean hasDevId();
+    /**
+     * <code>.context.DeviceId devId = 2;</code>
+     * @return The devId.
+     */
+    context.ContextOuterClass.DeviceId getDevId();
+    /**
+     * <code>.context.DeviceId devId = 2;</code>
+     */
+    context.ContextOuterClass.DeviceIdOrBuilder getDevIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code automation.DeviceRoleId}
+   */
+  public static final class DeviceRoleId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:automation.DeviceRoleId)
+      DeviceRoleIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceRoleId.newBuilder() to construct.
+    private DeviceRoleId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceRoleId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceRoleId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceRoleId(
+        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 (devRoleId_ != null) {
+                subBuilder = devRoleId_.toBuilder();
+              }
+              devRoleId_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(devRoleId_);
+                devRoleId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.DeviceId.Builder subBuilder = null;
+              if (devId_ != null) {
+                subBuilder = devId_.toBuilder();
+              }
+              devId_ = input.readMessage(context.ContextOuterClass.DeviceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(devId_);
+                devId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return automation.Automation.internal_static_automation_DeviceRoleId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return automation.Automation.internal_static_automation_DeviceRoleId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              automation.Automation.DeviceRoleId.class, automation.Automation.DeviceRoleId.Builder.class);
+    }
+
+    public static final int DEVROLEID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid devRoleId_;
+    /**
+     * <code>.context.Uuid devRoleId = 1;</code>
+     * @return Whether the devRoleId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDevRoleId() {
+      return devRoleId_ != null;
+    }
+    /**
+     * <code>.context.Uuid devRoleId = 1;</code>
+     * @return The devRoleId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getDevRoleId() {
+      return devRoleId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : devRoleId_;
+    }
+    /**
+     * <code>.context.Uuid devRoleId = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getDevRoleIdOrBuilder() {
+      return getDevRoleId();
+    }
+
+    public static final int DEVID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.DeviceId devId_;
+    /**
+     * <code>.context.DeviceId devId = 2;</code>
+     * @return Whether the devId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDevId() {
+      return devId_ != null;
+    }
+    /**
+     * <code>.context.DeviceId devId = 2;</code>
+     * @return The devId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceId getDevId() {
+      return devId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : devId_;
+    }
+    /**
+     * <code>.context.DeviceId devId = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.DeviceIdOrBuilder getDevIdOrBuilder() {
+      return getDevId();
+    }
+
+    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 (devRoleId_ != null) {
+        output.writeMessage(1, getDevRoleId());
+      }
+      if (devId_ != null) {
+        output.writeMessage(2, getDevId());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (devRoleId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDevRoleId());
+      }
+      if (devId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getDevId());
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof automation.Automation.DeviceRoleId)) {
+        return super.equals(obj);
+      }
+      automation.Automation.DeviceRoleId other = (automation.Automation.DeviceRoleId) obj;
+
+      if (hasDevRoleId() != other.hasDevRoleId()) return false;
+      if (hasDevRoleId()) {
+        if (!getDevRoleId()
+            .equals(other.getDevRoleId())) return false;
+      }
+      if (hasDevId() != other.hasDevId()) return false;
+      if (hasDevId()) {
+        if (!getDevId()
+            .equals(other.getDevId())) 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 (hasDevRoleId()) {
+        hash = (37 * hash) + DEVROLEID_FIELD_NUMBER;
+        hash = (53 * hash) + getDevRoleId().hashCode();
+      }
+      if (hasDevId()) {
+        hash = (37 * hash) + DEVID_FIELD_NUMBER;
+        hash = (53 * hash) + getDevId().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static automation.Automation.DeviceRoleId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleId parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleId parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(automation.Automation.DeviceRoleId prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code automation.DeviceRoleId}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:automation.DeviceRoleId)
+        automation.Automation.DeviceRoleIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return automation.Automation.internal_static_automation_DeviceRoleId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return automation.Automation.internal_static_automation_DeviceRoleId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                automation.Automation.DeviceRoleId.class, automation.Automation.DeviceRoleId.Builder.class);
+      }
+
+      // Construct using automation.Automation.DeviceRoleId.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 (devRoleIdBuilder_ == null) {
+          devRoleId_ = null;
+        } else {
+          devRoleId_ = null;
+          devRoleIdBuilder_ = null;
+        }
+        if (devIdBuilder_ == null) {
+          devId_ = null;
+        } else {
+          devId_ = null;
+          devIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return automation.Automation.internal_static_automation_DeviceRoleId_descriptor;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleId getDefaultInstanceForType() {
+        return automation.Automation.DeviceRoleId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleId build() {
+        automation.Automation.DeviceRoleId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleId buildPartial() {
+        automation.Automation.DeviceRoleId result = new automation.Automation.DeviceRoleId(this);
+        if (devRoleIdBuilder_ == null) {
+          result.devRoleId_ = devRoleId_;
+        } else {
+          result.devRoleId_ = devRoleIdBuilder_.build();
+        }
+        if (devIdBuilder_ == null) {
+          result.devId_ = devId_;
+        } else {
+          result.devId_ = devIdBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof automation.Automation.DeviceRoleId) {
+          return mergeFrom((automation.Automation.DeviceRoleId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(automation.Automation.DeviceRoleId other) {
+        if (other == automation.Automation.DeviceRoleId.getDefaultInstance()) return this;
+        if (other.hasDevRoleId()) {
+          mergeDevRoleId(other.getDevRoleId());
+        }
+        if (other.hasDevId()) {
+          mergeDevId(other.getDevId());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        automation.Automation.DeviceRoleId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (automation.Automation.DeviceRoleId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid devRoleId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> devRoleIdBuilder_;
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       * @return Whether the devRoleId field is set.
+       */
+      public boolean hasDevRoleId() {
+        return devRoleIdBuilder_ != null || devRoleId_ != null;
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       * @return The devRoleId.
+       */
+      public context.ContextOuterClass.Uuid getDevRoleId() {
+        if (devRoleIdBuilder_ == null) {
+          return devRoleId_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : devRoleId_;
+        } else {
+          return devRoleIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      public Builder setDevRoleId(context.ContextOuterClass.Uuid value) {
+        if (devRoleIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          devRoleId_ = value;
+          onChanged();
+        } else {
+          devRoleIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      public Builder setDevRoleId(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (devRoleIdBuilder_ == null) {
+          devRoleId_ = builderForValue.build();
+          onChanged();
+        } else {
+          devRoleIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      public Builder mergeDevRoleId(context.ContextOuterClass.Uuid value) {
+        if (devRoleIdBuilder_ == null) {
+          if (devRoleId_ != null) {
+            devRoleId_ =
+              context.ContextOuterClass.Uuid.newBuilder(devRoleId_).mergeFrom(value).buildPartial();
+          } else {
+            devRoleId_ = value;
+          }
+          onChanged();
+        } else {
+          devRoleIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      public Builder clearDevRoleId() {
+        if (devRoleIdBuilder_ == null) {
+          devRoleId_ = null;
+          onChanged();
+        } else {
+          devRoleId_ = null;
+          devRoleIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getDevRoleIdBuilder() {
+        
+        onChanged();
+        return getDevRoleIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getDevRoleIdOrBuilder() {
+        if (devRoleIdBuilder_ != null) {
+          return devRoleIdBuilder_.getMessageOrBuilder();
+        } else {
+          return devRoleId_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : devRoleId_;
+        }
+      }
+      /**
+       * <code>.context.Uuid devRoleId = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getDevRoleIdFieldBuilder() {
+        if (devRoleIdBuilder_ == null) {
+          devRoleIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getDevRoleId(),
+                  getParentForChildren(),
+                  isClean());
+          devRoleId_ = null;
+        }
+        return devRoleIdBuilder_;
+      }
+
+      private context.ContextOuterClass.DeviceId devId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> devIdBuilder_;
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       * @return Whether the devId field is set.
+       */
+      public boolean hasDevId() {
+        return devIdBuilder_ != null || devId_ != null;
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       * @return The devId.
+       */
+      public context.ContextOuterClass.DeviceId getDevId() {
+        if (devIdBuilder_ == null) {
+          return devId_ == null ? context.ContextOuterClass.DeviceId.getDefaultInstance() : devId_;
+        } else {
+          return devIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      public Builder setDevId(context.ContextOuterClass.DeviceId value) {
+        if (devIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          devId_ = value;
+          onChanged();
+        } else {
+          devIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      public Builder setDevId(
+          context.ContextOuterClass.DeviceId.Builder builderForValue) {
+        if (devIdBuilder_ == null) {
+          devId_ = builderForValue.build();
+          onChanged();
+        } else {
+          devIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      public Builder mergeDevId(context.ContextOuterClass.DeviceId value) {
+        if (devIdBuilder_ == null) {
+          if (devId_ != null) {
+            devId_ =
+              context.ContextOuterClass.DeviceId.newBuilder(devId_).mergeFrom(value).buildPartial();
+          } else {
+            devId_ = value;
+          }
+          onChanged();
+        } else {
+          devIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      public Builder clearDevId() {
+        if (devIdBuilder_ == null) {
+          devId_ = null;
+          onChanged();
+        } else {
+          devId_ = null;
+          devIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceId.Builder getDevIdBuilder() {
+        
+        onChanged();
+        return getDevIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      public context.ContextOuterClass.DeviceIdOrBuilder getDevIdOrBuilder() {
+        if (devIdBuilder_ != null) {
+          return devIdBuilder_.getMessageOrBuilder();
+        } else {
+          return devId_ == null ?
+              context.ContextOuterClass.DeviceId.getDefaultInstance() : devId_;
+        }
+      }
+      /**
+       * <code>.context.DeviceId devId = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder> 
+          getDevIdFieldBuilder() {
+        if (devIdBuilder_ == null) {
+          devIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceId.Builder, context.ContextOuterClass.DeviceIdOrBuilder>(
+                  getDevId(),
+                  getParentForChildren(),
+                  isClean());
+          devId_ = null;
+        }
+        return devIdBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:automation.DeviceRoleId)
+    }
+
+    // @@protoc_insertion_point(class_scope:automation.DeviceRoleId)
+    private static final automation.Automation.DeviceRoleId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new automation.Automation.DeviceRoleId();
+    }
+
+    public static automation.Automation.DeviceRoleId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceRoleId>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceRoleId>() {
+      @java.lang.Override
+      public DeviceRoleId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceRoleId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceRoleId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceRoleId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public automation.Automation.DeviceRoleId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceRoleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:automation.DeviceRole)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return Whether the devRoleId field is set.
+     */
+    boolean hasDevRoleId();
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return The devRoleId.
+     */
+    automation.Automation.DeviceRoleId getDevRoleId();
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     */
+    automation.Automation.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder();
+
+    /**
+     * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+     * @return The enum numeric value on the wire for devRoleType.
+     */
+    int getDevRoleTypeValue();
+    /**
+     * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+     * @return The devRoleType.
+     */
+    automation.Automation.DeviceRoleType getDevRoleType();
+  }
+  /**
+   * Protobuf type {@code automation.DeviceRole}
+   */
+  public static final class DeviceRole extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:automation.DeviceRole)
+      DeviceRoleOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceRole.newBuilder() to construct.
+    private DeviceRole(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceRole() {
+      devRoleType_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceRole();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceRole(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              automation.Automation.DeviceRoleId.Builder subBuilder = null;
+              if (devRoleId_ != null) {
+                subBuilder = devRoleId_.toBuilder();
+              }
+              devRoleId_ = input.readMessage(automation.Automation.DeviceRoleId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(devRoleId_);
+                devRoleId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              devRoleType_ = 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 automation.Automation.internal_static_automation_DeviceRole_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return automation.Automation.internal_static_automation_DeviceRole_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              automation.Automation.DeviceRole.class, automation.Automation.DeviceRole.Builder.class);
+    }
+
+    public static final int DEVROLEID_FIELD_NUMBER = 1;
+    private automation.Automation.DeviceRoleId devRoleId_;
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return Whether the devRoleId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDevRoleId() {
+      return devRoleId_ != null;
+    }
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return The devRoleId.
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRoleId getDevRoleId() {
+      return devRoleId_ == null ? automation.Automation.DeviceRoleId.getDefaultInstance() : devRoleId_;
+    }
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder() {
+      return getDevRoleId();
+    }
+
+    public static final int DEVROLETYPE_FIELD_NUMBER = 2;
+    private int devRoleType_;
+    /**
+     * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+     * @return The enum numeric value on the wire for devRoleType.
+     */
+    @java.lang.Override public int getDevRoleTypeValue() {
+      return devRoleType_;
+    }
+    /**
+     * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+     * @return The devRoleType.
+     */
+    @java.lang.Override public automation.Automation.DeviceRoleType getDevRoleType() {
+      @SuppressWarnings("deprecation")
+      automation.Automation.DeviceRoleType result = automation.Automation.DeviceRoleType.valueOf(devRoleType_);
+      return result == null ? automation.Automation.DeviceRoleType.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 (devRoleId_ != null) {
+        output.writeMessage(1, getDevRoleId());
+      }
+      if (devRoleType_ != automation.Automation.DeviceRoleType.NONE.getNumber()) {
+        output.writeEnum(2, devRoleType_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (devRoleId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDevRoleId());
+      }
+      if (devRoleType_ != automation.Automation.DeviceRoleType.NONE.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, devRoleType_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof automation.Automation.DeviceRole)) {
+        return super.equals(obj);
+      }
+      automation.Automation.DeviceRole other = (automation.Automation.DeviceRole) obj;
+
+      if (hasDevRoleId() != other.hasDevRoleId()) return false;
+      if (hasDevRoleId()) {
+        if (!getDevRoleId()
+            .equals(other.getDevRoleId())) return false;
+      }
+      if (devRoleType_ != other.devRoleType_) 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 (hasDevRoleId()) {
+        hash = (37 * hash) + DEVROLEID_FIELD_NUMBER;
+        hash = (53 * hash) + getDevRoleId().hashCode();
+      }
+      hash = (37 * hash) + DEVROLETYPE_FIELD_NUMBER;
+      hash = (53 * hash) + devRoleType_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static automation.Automation.DeviceRole parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRole parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRole parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRole parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRole parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRole parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(automation.Automation.DeviceRole prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code automation.DeviceRole}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:automation.DeviceRole)
+        automation.Automation.DeviceRoleOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return automation.Automation.internal_static_automation_DeviceRole_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return automation.Automation.internal_static_automation_DeviceRole_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                automation.Automation.DeviceRole.class, automation.Automation.DeviceRole.Builder.class);
+      }
+
+      // Construct using automation.Automation.DeviceRole.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 (devRoleIdBuilder_ == null) {
+          devRoleId_ = null;
+        } else {
+          devRoleId_ = null;
+          devRoleIdBuilder_ = null;
+        }
+        devRoleType_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return automation.Automation.internal_static_automation_DeviceRole_descriptor;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRole getDefaultInstanceForType() {
+        return automation.Automation.DeviceRole.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRole build() {
+        automation.Automation.DeviceRole result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRole buildPartial() {
+        automation.Automation.DeviceRole result = new automation.Automation.DeviceRole(this);
+        if (devRoleIdBuilder_ == null) {
+          result.devRoleId_ = devRoleId_;
+        } else {
+          result.devRoleId_ = devRoleIdBuilder_.build();
+        }
+        result.devRoleType_ = devRoleType_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof automation.Automation.DeviceRole) {
+          return mergeFrom((automation.Automation.DeviceRole)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(automation.Automation.DeviceRole other) {
+        if (other == automation.Automation.DeviceRole.getDefaultInstance()) return this;
+        if (other.hasDevRoleId()) {
+          mergeDevRoleId(other.getDevRoleId());
+        }
+        if (other.devRoleType_ != 0) {
+          setDevRoleTypeValue(other.getDevRoleTypeValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        automation.Automation.DeviceRole parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (automation.Automation.DeviceRole) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private automation.Automation.DeviceRoleId devRoleId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          automation.Automation.DeviceRoleId, automation.Automation.DeviceRoleId.Builder, automation.Automation.DeviceRoleIdOrBuilder> devRoleIdBuilder_;
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       * @return Whether the devRoleId field is set.
+       */
+      public boolean hasDevRoleId() {
+        return devRoleIdBuilder_ != null || devRoleId_ != null;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       * @return The devRoleId.
+       */
+      public automation.Automation.DeviceRoleId getDevRoleId() {
+        if (devRoleIdBuilder_ == null) {
+          return devRoleId_ == null ? automation.Automation.DeviceRoleId.getDefaultInstance() : devRoleId_;
+        } else {
+          return devRoleIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder setDevRoleId(automation.Automation.DeviceRoleId value) {
+        if (devRoleIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          devRoleId_ = value;
+          onChanged();
+        } else {
+          devRoleIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder setDevRoleId(
+          automation.Automation.DeviceRoleId.Builder builderForValue) {
+        if (devRoleIdBuilder_ == null) {
+          devRoleId_ = builderForValue.build();
+          onChanged();
+        } else {
+          devRoleIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder mergeDevRoleId(automation.Automation.DeviceRoleId value) {
+        if (devRoleIdBuilder_ == null) {
+          if (devRoleId_ != null) {
+            devRoleId_ =
+              automation.Automation.DeviceRoleId.newBuilder(devRoleId_).mergeFrom(value).buildPartial();
+          } else {
+            devRoleId_ = value;
+          }
+          onChanged();
+        } else {
+          devRoleIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder clearDevRoleId() {
+        if (devRoleIdBuilder_ == null) {
+          devRoleId_ = null;
+          onChanged();
+        } else {
+          devRoleId_ = null;
+          devRoleIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public automation.Automation.DeviceRoleId.Builder getDevRoleIdBuilder() {
+        
+        onChanged();
+        return getDevRoleIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public automation.Automation.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder() {
+        if (devRoleIdBuilder_ != null) {
+          return devRoleIdBuilder_.getMessageOrBuilder();
+        } else {
+          return devRoleId_ == null ?
+              automation.Automation.DeviceRoleId.getDefaultInstance() : devRoleId_;
+        }
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          automation.Automation.DeviceRoleId, automation.Automation.DeviceRoleId.Builder, automation.Automation.DeviceRoleIdOrBuilder> 
+          getDevRoleIdFieldBuilder() {
+        if (devRoleIdBuilder_ == null) {
+          devRoleIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              automation.Automation.DeviceRoleId, automation.Automation.DeviceRoleId.Builder, automation.Automation.DeviceRoleIdOrBuilder>(
+                  getDevRoleId(),
+                  getParentForChildren(),
+                  isClean());
+          devRoleId_ = null;
+        }
+        return devRoleIdBuilder_;
+      }
+
+      private int devRoleType_ = 0;
+      /**
+       * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+       * @return The enum numeric value on the wire for devRoleType.
+       */
+      @java.lang.Override public int getDevRoleTypeValue() {
+        return devRoleType_;
+      }
+      /**
+       * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+       * @param value The enum numeric value on the wire for devRoleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDevRoleTypeValue(int value) {
+        
+        devRoleType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+       * @return The devRoleType.
+       */
+      @java.lang.Override
+      public automation.Automation.DeviceRoleType getDevRoleType() {
+        @SuppressWarnings("deprecation")
+        automation.Automation.DeviceRoleType result = automation.Automation.DeviceRoleType.valueOf(devRoleType_);
+        return result == null ? automation.Automation.DeviceRoleType.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+       * @param value The devRoleType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDevRoleType(automation.Automation.DeviceRoleType value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        devRoleType_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleType devRoleType = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDevRoleType() {
+        
+        devRoleType_ = 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:automation.DeviceRole)
+    }
+
+    // @@protoc_insertion_point(class_scope:automation.DeviceRole)
+    private static final automation.Automation.DeviceRole DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new automation.Automation.DeviceRole();
+    }
+
+    public static automation.Automation.DeviceRole getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceRole>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceRole>() {
+      @java.lang.Override
+      public DeviceRole parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceRole(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceRole> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceRole> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public automation.Automation.DeviceRole getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceRoleListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:automation.DeviceRoleList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    java.util.List<automation.Automation.DeviceRole> 
+        getDevRoleList();
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    automation.Automation.DeviceRole getDevRole(int index);
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    int getDevRoleCount();
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    java.util.List<? extends automation.Automation.DeviceRoleOrBuilder> 
+        getDevRoleOrBuilderList();
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code automation.DeviceRoleList}
+   */
+  public static final class DeviceRoleList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:automation.DeviceRoleList)
+      DeviceRoleListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceRoleList.newBuilder() to construct.
+    private DeviceRoleList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceRoleList() {
+      devRole_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceRoleList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceRoleList(
+        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)) {
+                devRole_ = new java.util.ArrayList<automation.Automation.DeviceRole>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              devRole_.add(
+                  input.readMessage(automation.Automation.DeviceRole.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)) {
+          devRole_ = java.util.Collections.unmodifiableList(devRole_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return automation.Automation.internal_static_automation_DeviceRoleList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return automation.Automation.internal_static_automation_DeviceRoleList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              automation.Automation.DeviceRoleList.class, automation.Automation.DeviceRoleList.Builder.class);
+    }
+
+    public static final int DEVROLE_FIELD_NUMBER = 1;
+    private java.util.List<automation.Automation.DeviceRole> devRole_;
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<automation.Automation.DeviceRole> getDevRoleList() {
+      return devRole_;
+    }
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends automation.Automation.DeviceRoleOrBuilder> 
+        getDevRoleOrBuilderList() {
+      return devRole_;
+    }
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    @java.lang.Override
+    public int getDevRoleCount() {
+      return devRole_.size();
+    }
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRole getDevRole(int index) {
+      return devRole_.get(index);
+    }
+    /**
+     * <code>repeated .automation.DeviceRole devRole = 1;</code>
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder(
+        int index) {
+      return devRole_.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 < devRole_.size(); i++) {
+        output.writeMessage(1, devRole_.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 < devRole_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, devRole_.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 automation.Automation.DeviceRoleList)) {
+        return super.equals(obj);
+      }
+      automation.Automation.DeviceRoleList other = (automation.Automation.DeviceRoleList) obj;
+
+      if (!getDevRoleList()
+          .equals(other.getDevRoleList())) 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 (getDevRoleCount() > 0) {
+        hash = (37 * hash) + DEVROLE_FIELD_NUMBER;
+        hash = (53 * hash) + getDevRoleList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static automation.Automation.DeviceRoleList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(automation.Automation.DeviceRoleList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code automation.DeviceRoleList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:automation.DeviceRoleList)
+        automation.Automation.DeviceRoleListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return automation.Automation.internal_static_automation_DeviceRoleList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return automation.Automation.internal_static_automation_DeviceRoleList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                automation.Automation.DeviceRoleList.class, automation.Automation.DeviceRoleList.Builder.class);
+      }
+
+      // Construct using automation.Automation.DeviceRoleList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getDevRoleFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (devRoleBuilder_ == null) {
+          devRole_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          devRoleBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return automation.Automation.internal_static_automation_DeviceRoleList_descriptor;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleList getDefaultInstanceForType() {
+        return automation.Automation.DeviceRoleList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleList build() {
+        automation.Automation.DeviceRoleList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleList buildPartial() {
+        automation.Automation.DeviceRoleList result = new automation.Automation.DeviceRoleList(this);
+        int from_bitField0_ = bitField0_;
+        if (devRoleBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            devRole_ = java.util.Collections.unmodifiableList(devRole_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.devRole_ = devRole_;
+        } else {
+          result.devRole_ = devRoleBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof automation.Automation.DeviceRoleList) {
+          return mergeFrom((automation.Automation.DeviceRoleList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(automation.Automation.DeviceRoleList other) {
+        if (other == automation.Automation.DeviceRoleList.getDefaultInstance()) return this;
+        if (devRoleBuilder_ == null) {
+          if (!other.devRole_.isEmpty()) {
+            if (devRole_.isEmpty()) {
+              devRole_ = other.devRole_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureDevRoleIsMutable();
+              devRole_.addAll(other.devRole_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.devRole_.isEmpty()) {
+            if (devRoleBuilder_.isEmpty()) {
+              devRoleBuilder_.dispose();
+              devRoleBuilder_ = null;
+              devRole_ = other.devRole_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              devRoleBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getDevRoleFieldBuilder() : null;
+            } else {
+              devRoleBuilder_.addAllMessages(other.devRole_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        automation.Automation.DeviceRoleList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (automation.Automation.DeviceRoleList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      private java.util.List<automation.Automation.DeviceRole> devRole_ =
+        java.util.Collections.emptyList();
+      private void ensureDevRoleIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          devRole_ = new java.util.ArrayList<automation.Automation.DeviceRole>(devRole_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder> devRoleBuilder_;
+
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public java.util.List<automation.Automation.DeviceRole> getDevRoleList() {
+        if (devRoleBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(devRole_);
+        } else {
+          return devRoleBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public int getDevRoleCount() {
+        if (devRoleBuilder_ == null) {
+          return devRole_.size();
+        } else {
+          return devRoleBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRole getDevRole(int index) {
+        if (devRoleBuilder_ == null) {
+          return devRole_.get(index);
+        } else {
+          return devRoleBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder setDevRole(
+          int index, automation.Automation.DeviceRole value) {
+        if (devRoleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevRoleIsMutable();
+          devRole_.set(index, value);
+          onChanged();
+        } else {
+          devRoleBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder setDevRole(
+          int index, automation.Automation.DeviceRole.Builder builderForValue) {
+        if (devRoleBuilder_ == null) {
+          ensureDevRoleIsMutable();
+          devRole_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          devRoleBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder addDevRole(automation.Automation.DeviceRole value) {
+        if (devRoleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevRoleIsMutable();
+          devRole_.add(value);
+          onChanged();
+        } else {
+          devRoleBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder addDevRole(
+          int index, automation.Automation.DeviceRole value) {
+        if (devRoleBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureDevRoleIsMutable();
+          devRole_.add(index, value);
+          onChanged();
+        } else {
+          devRoleBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder addDevRole(
+          automation.Automation.DeviceRole.Builder builderForValue) {
+        if (devRoleBuilder_ == null) {
+          ensureDevRoleIsMutable();
+          devRole_.add(builderForValue.build());
+          onChanged();
+        } else {
+          devRoleBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder addDevRole(
+          int index, automation.Automation.DeviceRole.Builder builderForValue) {
+        if (devRoleBuilder_ == null) {
+          ensureDevRoleIsMutable();
+          devRole_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          devRoleBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder addAllDevRole(
+          java.lang.Iterable<? extends automation.Automation.DeviceRole> values) {
+        if (devRoleBuilder_ == null) {
+          ensureDevRoleIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, devRole_);
+          onChanged();
+        } else {
+          devRoleBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder clearDevRole() {
+        if (devRoleBuilder_ == null) {
+          devRole_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          devRoleBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public Builder removeDevRole(int index) {
+        if (devRoleBuilder_ == null) {
+          ensureDevRoleIsMutable();
+          devRole_.remove(index);
+          onChanged();
+        } else {
+          devRoleBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRole.Builder getDevRoleBuilder(
+          int index) {
+        return getDevRoleFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRoleOrBuilder getDevRoleOrBuilder(
+          int index) {
+        if (devRoleBuilder_ == null) {
+          return devRole_.get(index);  } else {
+          return devRoleBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public java.util.List<? extends automation.Automation.DeviceRoleOrBuilder> 
+           getDevRoleOrBuilderList() {
+        if (devRoleBuilder_ != null) {
+          return devRoleBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(devRole_);
+        }
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRole.Builder addDevRoleBuilder() {
+        return getDevRoleFieldBuilder().addBuilder(
+            automation.Automation.DeviceRole.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public automation.Automation.DeviceRole.Builder addDevRoleBuilder(
+          int index) {
+        return getDevRoleFieldBuilder().addBuilder(
+            index, automation.Automation.DeviceRole.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .automation.DeviceRole devRole = 1;</code>
+       */
+      public java.util.List<automation.Automation.DeviceRole.Builder> 
+           getDevRoleBuilderList() {
+        return getDevRoleFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder> 
+          getDevRoleFieldBuilder() {
+        if (devRoleBuilder_ == null) {
+          devRoleBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              automation.Automation.DeviceRole, automation.Automation.DeviceRole.Builder, automation.Automation.DeviceRoleOrBuilder>(
+                  devRole_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          devRole_ = null;
+        }
+        return devRoleBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:automation.DeviceRoleList)
+    }
+
+    // @@protoc_insertion_point(class_scope:automation.DeviceRoleList)
+    private static final automation.Automation.DeviceRoleList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new automation.Automation.DeviceRoleList();
+    }
+
+    public static automation.Automation.DeviceRoleList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceRoleList>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceRoleList>() {
+      @java.lang.Override
+      public DeviceRoleList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceRoleList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceRoleList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceRoleList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public automation.Automation.DeviceRoleList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface DeviceRoleStateOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:automation.DeviceRoleState)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return Whether the devRoleId field is set.
+     */
+    boolean hasDevRoleId();
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return The devRoleId.
+     */
+    automation.Automation.DeviceRoleId getDevRoleId();
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     */
+    automation.Automation.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder();
+
+    /**
+     * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+     * @return The enum numeric value on the wire for devRoleState.
+     */
+    int getDevRoleStateValue();
+    /**
+     * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+     * @return The devRoleState.
+     */
+    automation.Automation.ZtpDeviceState getDevRoleState();
+  }
+  /**
+   * Protobuf type {@code automation.DeviceRoleState}
+   */
+  public static final class DeviceRoleState extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:automation.DeviceRoleState)
+      DeviceRoleStateOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use DeviceRoleState.newBuilder() to construct.
+    private DeviceRoleState(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private DeviceRoleState() {
+      devRoleState_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new DeviceRoleState();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private DeviceRoleState(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              automation.Automation.DeviceRoleId.Builder subBuilder = null;
+              if (devRoleId_ != null) {
+                subBuilder = devRoleId_.toBuilder();
+              }
+              devRoleId_ = input.readMessage(automation.Automation.DeviceRoleId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(devRoleId_);
+                devRoleId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              devRoleState_ = 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 automation.Automation.internal_static_automation_DeviceRoleState_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return automation.Automation.internal_static_automation_DeviceRoleState_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              automation.Automation.DeviceRoleState.class, automation.Automation.DeviceRoleState.Builder.class);
+    }
+
+    public static final int DEVROLEID_FIELD_NUMBER = 1;
+    private automation.Automation.DeviceRoleId devRoleId_;
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return Whether the devRoleId field is set.
+     */
+    @java.lang.Override
+    public boolean hasDevRoleId() {
+      return devRoleId_ != null;
+    }
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     * @return The devRoleId.
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRoleId getDevRoleId() {
+      return devRoleId_ == null ? automation.Automation.DeviceRoleId.getDefaultInstance() : devRoleId_;
+    }
+    /**
+     * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+     */
+    @java.lang.Override
+    public automation.Automation.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder() {
+      return getDevRoleId();
+    }
+
+    public static final int DEVROLESTATE_FIELD_NUMBER = 2;
+    private int devRoleState_;
+    /**
+     * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+     * @return The enum numeric value on the wire for devRoleState.
+     */
+    @java.lang.Override public int getDevRoleStateValue() {
+      return devRoleState_;
+    }
+    /**
+     * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+     * @return The devRoleState.
+     */
+    @java.lang.Override public automation.Automation.ZtpDeviceState getDevRoleState() {
+      @SuppressWarnings("deprecation")
+      automation.Automation.ZtpDeviceState result = automation.Automation.ZtpDeviceState.valueOf(devRoleState_);
+      return result == null ? automation.Automation.ZtpDeviceState.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 (devRoleId_ != null) {
+        output.writeMessage(1, getDevRoleId());
+      }
+      if (devRoleState_ != automation.Automation.ZtpDeviceState.PLANNED.getNumber()) {
+        output.writeEnum(2, devRoleState_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (devRoleId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getDevRoleId());
+      }
+      if (devRoleState_ != automation.Automation.ZtpDeviceState.PLANNED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(2, devRoleState_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof automation.Automation.DeviceRoleState)) {
+        return super.equals(obj);
+      }
+      automation.Automation.DeviceRoleState other = (automation.Automation.DeviceRoleState) obj;
+
+      if (hasDevRoleId() != other.hasDevRoleId()) return false;
+      if (hasDevRoleId()) {
+        if (!getDevRoleId()
+            .equals(other.getDevRoleId())) return false;
+      }
+      if (devRoleState_ != other.devRoleState_) 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 (hasDevRoleId()) {
+        hash = (37 * hash) + DEVROLEID_FIELD_NUMBER;
+        hash = (53 * hash) + getDevRoleId().hashCode();
+      }
+      hash = (37 * hash) + DEVROLESTATE_FIELD_NUMBER;
+      hash = (53 * hash) + devRoleState_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static automation.Automation.DeviceRoleState parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleState parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleState parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static automation.Automation.DeviceRoleState parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(automation.Automation.DeviceRoleState prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code automation.DeviceRoleState}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:automation.DeviceRoleState)
+        automation.Automation.DeviceRoleStateOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return automation.Automation.internal_static_automation_DeviceRoleState_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return automation.Automation.internal_static_automation_DeviceRoleState_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                automation.Automation.DeviceRoleState.class, automation.Automation.DeviceRoleState.Builder.class);
+      }
+
+      // Construct using automation.Automation.DeviceRoleState.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 (devRoleIdBuilder_ == null) {
+          devRoleId_ = null;
+        } else {
+          devRoleId_ = null;
+          devRoleIdBuilder_ = null;
+        }
+        devRoleState_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return automation.Automation.internal_static_automation_DeviceRoleState_descriptor;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleState getDefaultInstanceForType() {
+        return automation.Automation.DeviceRoleState.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleState build() {
+        automation.Automation.DeviceRoleState result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public automation.Automation.DeviceRoleState buildPartial() {
+        automation.Automation.DeviceRoleState result = new automation.Automation.DeviceRoleState(this);
+        if (devRoleIdBuilder_ == null) {
+          result.devRoleId_ = devRoleId_;
+        } else {
+          result.devRoleId_ = devRoleIdBuilder_.build();
+        }
+        result.devRoleState_ = devRoleState_;
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof automation.Automation.DeviceRoleState) {
+          return mergeFrom((automation.Automation.DeviceRoleState)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(automation.Automation.DeviceRoleState other) {
+        if (other == automation.Automation.DeviceRoleState.getDefaultInstance()) return this;
+        if (other.hasDevRoleId()) {
+          mergeDevRoleId(other.getDevRoleId());
+        }
+        if (other.devRoleState_ != 0) {
+          setDevRoleStateValue(other.getDevRoleStateValue());
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        automation.Automation.DeviceRoleState parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (automation.Automation.DeviceRoleState) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private automation.Automation.DeviceRoleId devRoleId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          automation.Automation.DeviceRoleId, automation.Automation.DeviceRoleId.Builder, automation.Automation.DeviceRoleIdOrBuilder> devRoleIdBuilder_;
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       * @return Whether the devRoleId field is set.
+       */
+      public boolean hasDevRoleId() {
+        return devRoleIdBuilder_ != null || devRoleId_ != null;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       * @return The devRoleId.
+       */
+      public automation.Automation.DeviceRoleId getDevRoleId() {
+        if (devRoleIdBuilder_ == null) {
+          return devRoleId_ == null ? automation.Automation.DeviceRoleId.getDefaultInstance() : devRoleId_;
+        } else {
+          return devRoleIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder setDevRoleId(automation.Automation.DeviceRoleId value) {
+        if (devRoleIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          devRoleId_ = value;
+          onChanged();
+        } else {
+          devRoleIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder setDevRoleId(
+          automation.Automation.DeviceRoleId.Builder builderForValue) {
+        if (devRoleIdBuilder_ == null) {
+          devRoleId_ = builderForValue.build();
+          onChanged();
+        } else {
+          devRoleIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder mergeDevRoleId(automation.Automation.DeviceRoleId value) {
+        if (devRoleIdBuilder_ == null) {
+          if (devRoleId_ != null) {
+            devRoleId_ =
+              automation.Automation.DeviceRoleId.newBuilder(devRoleId_).mergeFrom(value).buildPartial();
+          } else {
+            devRoleId_ = value;
+          }
+          onChanged();
+        } else {
+          devRoleIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public Builder clearDevRoleId() {
+        if (devRoleIdBuilder_ == null) {
+          devRoleId_ = null;
+          onChanged();
+        } else {
+          devRoleId_ = null;
+          devRoleIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public automation.Automation.DeviceRoleId.Builder getDevRoleIdBuilder() {
+        
+        onChanged();
+        return getDevRoleIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      public automation.Automation.DeviceRoleIdOrBuilder getDevRoleIdOrBuilder() {
+        if (devRoleIdBuilder_ != null) {
+          return devRoleIdBuilder_.getMessageOrBuilder();
+        } else {
+          return devRoleId_ == null ?
+              automation.Automation.DeviceRoleId.getDefaultInstance() : devRoleId_;
+        }
+      }
+      /**
+       * <code>.automation.DeviceRoleId devRoleId = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          automation.Automation.DeviceRoleId, automation.Automation.DeviceRoleId.Builder, automation.Automation.DeviceRoleIdOrBuilder> 
+          getDevRoleIdFieldBuilder() {
+        if (devRoleIdBuilder_ == null) {
+          devRoleIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              automation.Automation.DeviceRoleId, automation.Automation.DeviceRoleId.Builder, automation.Automation.DeviceRoleIdOrBuilder>(
+                  getDevRoleId(),
+                  getParentForChildren(),
+                  isClean());
+          devRoleId_ = null;
+        }
+        return devRoleIdBuilder_;
+      }
+
+      private int devRoleState_ = 0;
+      /**
+       * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+       * @return The enum numeric value on the wire for devRoleState.
+       */
+      @java.lang.Override public int getDevRoleStateValue() {
+        return devRoleState_;
+      }
+      /**
+       * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+       * @param value The enum numeric value on the wire for devRoleState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDevRoleStateValue(int value) {
+        
+        devRoleState_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+       * @return The devRoleState.
+       */
+      @java.lang.Override
+      public automation.Automation.ZtpDeviceState getDevRoleState() {
+        @SuppressWarnings("deprecation")
+        automation.Automation.ZtpDeviceState result = automation.Automation.ZtpDeviceState.valueOf(devRoleState_);
+        return result == null ? automation.Automation.ZtpDeviceState.UNRECOGNIZED : result;
+      }
+      /**
+       * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+       * @param value The devRoleState to set.
+       * @return This builder for chaining.
+       */
+      public Builder setDevRoleState(automation.Automation.ZtpDeviceState value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        devRoleState_ = value.getNumber();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.automation.ZtpDeviceState devRoleState = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearDevRoleState() {
+        
+        devRoleState_ = 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:automation.DeviceRoleState)
+    }
+
+    // @@protoc_insertion_point(class_scope:automation.DeviceRoleState)
+    private static final automation.Automation.DeviceRoleState DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new automation.Automation.DeviceRoleState();
+    }
+
+    public static automation.Automation.DeviceRoleState getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<DeviceRoleState>
+        PARSER = new com.google.protobuf.AbstractParser<DeviceRoleState>() {
+      @java.lang.Override
+      public DeviceRoleState parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new DeviceRoleState(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<DeviceRoleState> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<DeviceRoleState> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public automation.Automation.DeviceRoleState getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_automation_DeviceRoleId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_automation_DeviceRoleId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_automation_DeviceRole_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_automation_DeviceRole_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_automation_DeviceRoleList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_automation_DeviceRoleList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_automation_DeviceRoleState_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_automation_DeviceRoleState_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\020automation.proto\022\nautomation\032\rcontext." +
+      "proto\"R\n\014DeviceRoleId\022 \n\tdevRoleId\030\001 \001(\013" +
+      "2\r.context.Uuid\022 \n\005devId\030\002 \001(\0132\021.context" +
+      ".DeviceId\"j\n\nDeviceRole\022+\n\tdevRoleId\030\001 \001" +
+      "(\0132\030.automation.DeviceRoleId\022/\n\013devRoleT" +
+      "ype\030\002 \001(\0162\032.automation.DeviceRoleType\"9\n" +
+      "\016DeviceRoleList\022\'\n\007devRole\030\001 \003(\0132\026.autom" +
+      "ation.DeviceRole\"p\n\017DeviceRoleState\022+\n\td" +
+      "evRoleId\030\001 \001(\0132\030.automation.DeviceRoleId" +
+      "\0220\n\014devRoleState\030\002 \001(\0162\032.automation.ZtpD" +
+      "eviceState*H\n\016DeviceRoleType\022\010\n\004NONE\020\000\022\013" +
+      "\n\007DEV_OPS\020\001\022\014\n\010DEV_CONF\020\002\022\021\n\rPIPELINE_CO" +
+      "NF\020\003*n\n\016ZtpDeviceState\022\013\n\007PLANNED\020\000\022\027\n\023P" +
+      "OTENCIAL_AVAILABLE\020\001\022\022\n\016POTENCIAL_BUSY\020\002" +
+      "\022\r\n\tINSTALLED\020\003\022\023\n\017PENDING_REMOVAL\020\0042\300\003\n" +
+      "\021AutomationService\022F\n\020ZtpGetDeviceRole\022\030" +
+      ".automation.DeviceRoleId\032\026.automation.De" +
+      "viceRole\"\000\022N\n\033ZtpGetDeviceRolesByDeviceI" +
+      "d\022\021.context.DeviceId\032\032.automation.Device" +
+      "RoleList\"\000\022?\n\006ZtpAdd\022\026.automation.Device" +
+      "Role\032\033.automation.DeviceRoleState\"\000\022B\n\tZ" +
+      "tpUpdate\022\026.automation.DeviceRole\032\033.autom" +
+      "ation.DeviceRoleState\"\000\022B\n\tZtpDelete\022\026.a" +
+      "utomation.DeviceRole\032\033.automation.Device" +
+      "RoleState\"\000\022J\n\026ZtpDeleteAllByDeviceId\022\021." +
+      "context.DeviceId\032\033.automation.DeviceRole" +
+      "State\"\000b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          context.ContextOuterClass.getDescriptor(),
+        });
+    internal_static_automation_DeviceRoleId_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_automation_DeviceRoleId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_automation_DeviceRoleId_descriptor,
+        new java.lang.String[] { "DevRoleId", "DevId", });
+    internal_static_automation_DeviceRole_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_automation_DeviceRole_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_automation_DeviceRole_descriptor,
+        new java.lang.String[] { "DevRoleId", "DevRoleType", });
+    internal_static_automation_DeviceRoleList_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_automation_DeviceRoleList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_automation_DeviceRoleList_descriptor,
+        new java.lang.String[] { "DevRole", });
+    internal_static_automation_DeviceRoleState_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_automation_DeviceRoleState_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_automation_DeviceRoleState_descriptor,
+        new java.lang.String[] { "DevRoleId", "DevRoleState", });
+    context.ContextOuterClass.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationService.java b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
new file mode 100644
index 0000000000000000000000000000000000000000..48120d61134e7c0fcffad1a1be87803c4e80bc7b
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationService.java
@@ -0,0 +1,26 @@
+package automation;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: automation.proto")
+public interface AutomationService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRole> ztpGetDeviceRole(automation.Automation.DeviceRoleId request);
+    
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request);
+    
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request);
+    
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request);
+    
+    io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request);
+    
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..de0257c919b07d35c049b981e331df3d9847769a
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceBean.java
@@ -0,0 +1,67 @@
+package automation;
+
+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: automation.proto")
+public class AutomationServiceBean extends MutinyAutomationServiceGrpc.AutomationServiceImplBase implements BindableService, MutinyBean {
+
+    private final AutomationService delegate;
+
+    AutomationServiceBean(@GrpcService AutomationService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRole> ztpGetDeviceRole(automation.Automation.DeviceRoleId request) {
+       try {
+         return delegate.ztpGetDeviceRole(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.ztpGetDeviceRolesByDeviceId(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request) {
+       try {
+         return delegate.ztpAdd(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+       try {
+         return delegate.ztpUpdate(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request) {
+       try {
+         return delegate.ztpDelete(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.ztpDeleteAllByDeviceId(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..736b662c1a7d6ca71ee1a2dcbdc98c5a7d459016
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceClient.java
@@ -0,0 +1,48 @@
+package automation;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: automation.proto")
+public class AutomationServiceClient implements AutomationService, MutinyClient<MutinyAutomationServiceGrpc.MutinyAutomationServiceStub> {
+
+    private final MutinyAutomationServiceGrpc.MutinyAutomationServiceStub stub;
+
+    public AutomationServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyAutomationServiceGrpc.MutinyAutomationServiceStub, MutinyAutomationServiceGrpc.MutinyAutomationServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyAutomationServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyAutomationServiceGrpc.MutinyAutomationServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRole> ztpGetDeviceRole(automation.Automation.DeviceRoleId request) {
+       return stub.ztpGetDeviceRole(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request) {
+       return stub.ztpGetDeviceRolesByDeviceId(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request) {
+       return stub.ztpAdd(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+       return stub.ztpUpdate(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request) {
+       return stub.ztpDelete(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request) {
+       return stub.ztpDeleteAllByDeviceId(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..7fd2b7594e492841ecf330fc75e63744992f9d8d
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/automation/AutomationServiceGrpc.java
@@ -0,0 +1,645 @@
+package automation;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: automation.proto")
+public final class AutomationServiceGrpc {
+
+  private AutomationServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "automation.AutomationService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRoleId,
+      automation.Automation.DeviceRole> getZtpGetDeviceRoleMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ZtpGetDeviceRole",
+      requestType = automation.Automation.DeviceRoleId.class,
+      responseType = automation.Automation.DeviceRole.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRoleId,
+      automation.Automation.DeviceRole> getZtpGetDeviceRoleMethod() {
+    io.grpc.MethodDescriptor<automation.Automation.DeviceRoleId, automation.Automation.DeviceRole> getZtpGetDeviceRoleMethod;
+    if ((getZtpGetDeviceRoleMethod = AutomationServiceGrpc.getZtpGetDeviceRoleMethod) == null) {
+      synchronized (AutomationServiceGrpc.class) {
+        if ((getZtpGetDeviceRoleMethod = AutomationServiceGrpc.getZtpGetDeviceRoleMethod) == null) {
+          AutomationServiceGrpc.getZtpGetDeviceRoleMethod = getZtpGetDeviceRoleMethod =
+              io.grpc.MethodDescriptor.<automation.Automation.DeviceRoleId, automation.Automation.DeviceRole>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpGetDeviceRole"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRoleId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRole.getDefaultInstance()))
+              .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpGetDeviceRole"))
+              .build();
+        }
+      }
+    }
+    return getZtpGetDeviceRoleMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      automation.Automation.DeviceRoleList> getZtpGetDeviceRolesByDeviceIdMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ZtpGetDeviceRolesByDeviceId",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = automation.Automation.DeviceRoleList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      automation.Automation.DeviceRoleList> getZtpGetDeviceRolesByDeviceIdMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, automation.Automation.DeviceRoleList> getZtpGetDeviceRolesByDeviceIdMethod;
+    if ((getZtpGetDeviceRolesByDeviceIdMethod = AutomationServiceGrpc.getZtpGetDeviceRolesByDeviceIdMethod) == null) {
+      synchronized (AutomationServiceGrpc.class) {
+        if ((getZtpGetDeviceRolesByDeviceIdMethod = AutomationServiceGrpc.getZtpGetDeviceRolesByDeviceIdMethod) == null) {
+          AutomationServiceGrpc.getZtpGetDeviceRolesByDeviceIdMethod = getZtpGetDeviceRolesByDeviceIdMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, automation.Automation.DeviceRoleList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpGetDeviceRolesByDeviceId"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRoleList.getDefaultInstance()))
+              .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpGetDeviceRolesByDeviceId"))
+              .build();
+        }
+      }
+    }
+    return getZtpGetDeviceRolesByDeviceIdMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+      automation.Automation.DeviceRoleState> getZtpAddMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ZtpAdd",
+      requestType = automation.Automation.DeviceRole.class,
+      responseType = automation.Automation.DeviceRoleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+      automation.Automation.DeviceRoleState> getZtpAddMethod() {
+    io.grpc.MethodDescriptor<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState> getZtpAddMethod;
+    if ((getZtpAddMethod = AutomationServiceGrpc.getZtpAddMethod) == null) {
+      synchronized (AutomationServiceGrpc.class) {
+        if ((getZtpAddMethod = AutomationServiceGrpc.getZtpAddMethod) == null) {
+          AutomationServiceGrpc.getZtpAddMethod = getZtpAddMethod =
+              io.grpc.MethodDescriptor.<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpAdd"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRole.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRoleState.getDefaultInstance()))
+              .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpAdd"))
+              .build();
+        }
+      }
+    }
+    return getZtpAddMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+      automation.Automation.DeviceRoleState> getZtpUpdateMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ZtpUpdate",
+      requestType = automation.Automation.DeviceRole.class,
+      responseType = automation.Automation.DeviceRoleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+      automation.Automation.DeviceRoleState> getZtpUpdateMethod() {
+    io.grpc.MethodDescriptor<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState> getZtpUpdateMethod;
+    if ((getZtpUpdateMethod = AutomationServiceGrpc.getZtpUpdateMethod) == null) {
+      synchronized (AutomationServiceGrpc.class) {
+        if ((getZtpUpdateMethod = AutomationServiceGrpc.getZtpUpdateMethod) == null) {
+          AutomationServiceGrpc.getZtpUpdateMethod = getZtpUpdateMethod =
+              io.grpc.MethodDescriptor.<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpUpdate"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRole.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRoleState.getDefaultInstance()))
+              .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpUpdate"))
+              .build();
+        }
+      }
+    }
+    return getZtpUpdateMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+      automation.Automation.DeviceRoleState> getZtpDeleteMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ZtpDelete",
+      requestType = automation.Automation.DeviceRole.class,
+      responseType = automation.Automation.DeviceRoleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<automation.Automation.DeviceRole,
+      automation.Automation.DeviceRoleState> getZtpDeleteMethod() {
+    io.grpc.MethodDescriptor<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState> getZtpDeleteMethod;
+    if ((getZtpDeleteMethod = AutomationServiceGrpc.getZtpDeleteMethod) == null) {
+      synchronized (AutomationServiceGrpc.class) {
+        if ((getZtpDeleteMethod = AutomationServiceGrpc.getZtpDeleteMethod) == null) {
+          AutomationServiceGrpc.getZtpDeleteMethod = getZtpDeleteMethod =
+              io.grpc.MethodDescriptor.<automation.Automation.DeviceRole, automation.Automation.DeviceRoleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpDelete"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRole.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRoleState.getDefaultInstance()))
+              .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpDelete"))
+              .build();
+        }
+      }
+    }
+    return getZtpDeleteMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      automation.Automation.DeviceRoleState> getZtpDeleteAllByDeviceIdMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ZtpDeleteAllByDeviceId",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = automation.Automation.DeviceRoleState.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      automation.Automation.DeviceRoleState> getZtpDeleteAllByDeviceIdMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, automation.Automation.DeviceRoleState> getZtpDeleteAllByDeviceIdMethod;
+    if ((getZtpDeleteAllByDeviceIdMethod = AutomationServiceGrpc.getZtpDeleteAllByDeviceIdMethod) == null) {
+      synchronized (AutomationServiceGrpc.class) {
+        if ((getZtpDeleteAllByDeviceIdMethod = AutomationServiceGrpc.getZtpDeleteAllByDeviceIdMethod) == null) {
+          AutomationServiceGrpc.getZtpDeleteAllByDeviceIdMethod = getZtpDeleteAllByDeviceIdMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, automation.Automation.DeviceRoleState>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ZtpDeleteAllByDeviceId"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  automation.Automation.DeviceRoleState.getDefaultInstance()))
+              .setSchemaDescriptor(new AutomationServiceMethodDescriptorSupplier("ZtpDeleteAllByDeviceId"))
+              .build();
+        }
+      }
+    }
+    return getZtpDeleteAllByDeviceIdMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static AutomationServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<AutomationServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<AutomationServiceStub>() {
+        @java.lang.Override
+        public AutomationServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new AutomationServiceStub(channel, callOptions);
+        }
+      };
+    return AutomationServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static AutomationServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<AutomationServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<AutomationServiceBlockingStub>() {
+        @java.lang.Override
+        public AutomationServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new AutomationServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return AutomationServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static AutomationServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<AutomationServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<AutomationServiceFutureStub>() {
+        @java.lang.Override
+        public AutomationServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new AutomationServiceFutureStub(channel, callOptions);
+        }
+      };
+    return AutomationServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   */
+  public static abstract class AutomationServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void ztpGetDeviceRole(automation.Automation.DeviceRoleId request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRole> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpGetDeviceRoleMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpGetDeviceRolesByDeviceIdMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void ztpAdd(automation.Automation.DeviceRole request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpAddMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void ztpUpdate(automation.Automation.DeviceRole request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpUpdateMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void ztpDelete(automation.Automation.DeviceRole request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpDeleteMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getZtpDeleteAllByDeviceIdMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getZtpGetDeviceRoleMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                automation.Automation.DeviceRoleId,
+                automation.Automation.DeviceRole>(
+                  this, METHODID_ZTP_GET_DEVICE_ROLE)))
+          .addMethod(
+            getZtpGetDeviceRolesByDeviceIdMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                automation.Automation.DeviceRoleList>(
+                  this, METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID)))
+          .addMethod(
+            getZtpAddMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                automation.Automation.DeviceRole,
+                automation.Automation.DeviceRoleState>(
+                  this, METHODID_ZTP_ADD)))
+          .addMethod(
+            getZtpUpdateMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                automation.Automation.DeviceRole,
+                automation.Automation.DeviceRoleState>(
+                  this, METHODID_ZTP_UPDATE)))
+          .addMethod(
+            getZtpDeleteMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                automation.Automation.DeviceRole,
+                automation.Automation.DeviceRoleState>(
+                  this, METHODID_ZTP_DELETE)))
+          .addMethod(
+            getZtpDeleteAllByDeviceIdMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                automation.Automation.DeviceRoleState>(
+                  this, METHODID_ZTP_DELETE_ALL_BY_DEVICE_ID)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class AutomationServiceStub extends io.grpc.stub.AbstractAsyncStub<AutomationServiceStub> {
+    private AutomationServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected AutomationServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new AutomationServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void ztpGetDeviceRole(automation.Automation.DeviceRoleId request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRole> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getZtpGetDeviceRoleMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getZtpGetDeviceRolesByDeviceIdMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void ztpAdd(automation.Automation.DeviceRole request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getZtpAddMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void ztpUpdate(automation.Automation.DeviceRole request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getZtpUpdateMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void ztpDelete(automation.Automation.DeviceRole request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getZtpDeleteMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getZtpDeleteAllByDeviceIdMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class AutomationServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<AutomationServiceBlockingStub> {
+    private AutomationServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected AutomationServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new AutomationServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public automation.Automation.DeviceRole ztpGetDeviceRole(automation.Automation.DeviceRoleId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getZtpGetDeviceRoleMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public automation.Automation.DeviceRoleList ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getZtpGetDeviceRolesByDeviceIdMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public automation.Automation.DeviceRoleState ztpAdd(automation.Automation.DeviceRole request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getZtpAddMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public automation.Automation.DeviceRoleState ztpUpdate(automation.Automation.DeviceRole request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getZtpUpdateMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public automation.Automation.DeviceRoleState ztpDelete(automation.Automation.DeviceRole request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getZtpDeleteMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public automation.Automation.DeviceRoleState ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getZtpDeleteAllByDeviceIdMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class AutomationServiceFutureStub extends io.grpc.stub.AbstractFutureStub<AutomationServiceFutureStub> {
+    private AutomationServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected AutomationServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new AutomationServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRole> ztpGetDeviceRole(
+        automation.Automation.DeviceRoleId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getZtpGetDeviceRoleMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getZtpGetDeviceRolesByDeviceIdMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleState> ztpAdd(
+        automation.Automation.DeviceRole request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getZtpAddMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleState> ztpUpdate(
+        automation.Automation.DeviceRole request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getZtpUpdateMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleState> ztpDelete(
+        automation.Automation.DeviceRole request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getZtpDeleteMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<automation.Automation.DeviceRoleState> ztpDeleteAllByDeviceId(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getZtpDeleteAllByDeviceIdMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_ZTP_GET_DEVICE_ROLE = 0;
+  private static final int METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID = 1;
+  private static final int METHODID_ZTP_ADD = 2;
+  private static final int METHODID_ZTP_UPDATE = 3;
+  private static final int METHODID_ZTP_DELETE = 4;
+  private static final int METHODID_ZTP_DELETE_ALL_BY_DEVICE_ID = 5;
+
+  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 AutomationServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(AutomationServiceImplBase 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_ZTP_GET_DEVICE_ROLE:
+          serviceImpl.ztpGetDeviceRole((automation.Automation.DeviceRoleId) request,
+              (io.grpc.stub.StreamObserver<automation.Automation.DeviceRole>) responseObserver);
+          break;
+        case METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID:
+          serviceImpl.ztpGetDeviceRolesByDeviceId((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleList>) responseObserver);
+          break;
+        case METHODID_ZTP_ADD:
+          serviceImpl.ztpAdd((automation.Automation.DeviceRole) request,
+              (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
+          break;
+        case METHODID_ZTP_UPDATE:
+          serviceImpl.ztpUpdate((automation.Automation.DeviceRole) request,
+              (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
+          break;
+        case METHODID_ZTP_DELETE:
+          serviceImpl.ztpDelete((automation.Automation.DeviceRole) request,
+              (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver);
+          break;
+        case METHODID_ZTP_DELETE_ALL_BY_DEVICE_ID:
+          serviceImpl.ztpDeleteAllByDeviceId((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) 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 AutomationServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    AutomationServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return automation.Automation.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("AutomationService");
+    }
+  }
+
+  private static final class AutomationServiceFileDescriptorSupplier
+      extends AutomationServiceBaseDescriptorSupplier {
+    AutomationServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class AutomationServiceMethodDescriptorSupplier
+      extends AutomationServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    AutomationServiceMethodDescriptorSupplier(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 (AutomationServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new AutomationServiceFileDescriptorSupplier())
+              .addMethod(getZtpGetDeviceRoleMethod())
+              .addMethod(getZtpGetDeviceRolesByDeviceIdMethod())
+              .addMethod(getZtpAddMethod())
+              .addMethod(getZtpUpdateMethod())
+              .addMethod(getZtpDeleteMethod())
+              .addMethod(getZtpDeleteAllByDeviceIdMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..4b0e989a1f7e7c377828ddff0159d10d3ffa2ba2
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/automation/MutinyAutomationServiceGrpc.java
@@ -0,0 +1,240 @@
+package automation;
+
+import static automation.AutomationServiceGrpc.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: automation.proto")
+public final class MutinyAutomationServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyAutomationServiceGrpc() {}
+
+    public static MutinyAutomationServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyAutomationServiceStub(channel);
+    }
+
+    
+    public static final class MutinyAutomationServiceStub extends io.grpc.stub.AbstractStub<MutinyAutomationServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private AutomationServiceGrpc.AutomationServiceStub delegateStub;
+
+        private MutinyAutomationServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = AutomationServiceGrpc.newStub(channel);
+        }
+
+        private MutinyAutomationServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = AutomationServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyAutomationServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyAutomationServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRole> ztpGetDeviceRole(automation.Automation.DeviceRoleId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpGetDeviceRole);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpGetDeviceRolesByDeviceId);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpAdd);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpUpdate);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpDelete);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::ztpDeleteAllByDeviceId);
+        }
+
+    }
+
+    
+    public static abstract class AutomationServiceImplBase 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 AutomationServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRole> ztpGetDeviceRole(automation.Automation.DeviceRoleId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleList> ztpGetDeviceRolesByDeviceId(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpAdd(automation.Automation.DeviceRole request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpUpdate(automation.Automation.DeviceRole request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDelete(automation.Automation.DeviceRole request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<automation.Automation.DeviceRoleState> ztpDeleteAllByDeviceId(context.ContextOuterClass.DeviceId 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(
+                            automation.AutomationServiceGrpc.getZtpGetDeviceRoleMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            automation.Automation.DeviceRoleId,
+                                            automation.Automation.DeviceRole>(
+                                            this, METHODID_ZTP_GET_DEVICE_ROLE, compression)))
+                    .addMethod(
+                            automation.AutomationServiceGrpc.getZtpGetDeviceRolesByDeviceIdMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            automation.Automation.DeviceRoleList>(
+                                            this, METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID, compression)))
+                    .addMethod(
+                            automation.AutomationServiceGrpc.getZtpAddMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            automation.Automation.DeviceRole,
+                                            automation.Automation.DeviceRoleState>(
+                                            this, METHODID_ZTP_ADD, compression)))
+                    .addMethod(
+                            automation.AutomationServiceGrpc.getZtpUpdateMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            automation.Automation.DeviceRole,
+                                            automation.Automation.DeviceRoleState>(
+                                            this, METHODID_ZTP_UPDATE, compression)))
+                    .addMethod(
+                            automation.AutomationServiceGrpc.getZtpDeleteMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            automation.Automation.DeviceRole,
+                                            automation.Automation.DeviceRoleState>(
+                                            this, METHODID_ZTP_DELETE, compression)))
+                    .addMethod(
+                            automation.AutomationServiceGrpc.getZtpDeleteAllByDeviceIdMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            automation.Automation.DeviceRoleState>(
+                                            this, METHODID_ZTP_DELETE_ALL_BY_DEVICE_ID, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_ZTP_GET_DEVICE_ROLE = 0;
+    private static final int METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID = 1;
+    private static final int METHODID_ZTP_ADD = 2;
+    private static final int METHODID_ZTP_UPDATE = 3;
+    private static final int METHODID_ZTP_DELETE = 4;
+    private static final int METHODID_ZTP_DELETE_ALL_BY_DEVICE_ID = 5;
+
+    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 AutomationServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(AutomationServiceImplBase 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_ZTP_GET_DEVICE_ROLE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRoleId) request,
+                            (io.grpc.stub.StreamObserver<automation.Automation.DeviceRole>) responseObserver,
+                            compression,
+                            serviceImpl::ztpGetDeviceRole);
+                    break;
+                case METHODID_ZTP_GET_DEVICE_ROLES_BY_DEVICE_ID:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleList>) responseObserver,
+                            compression,
+                            serviceImpl::ztpGetDeviceRolesByDeviceId);
+                    break;
+                case METHODID_ZTP_ADD:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRole) request,
+                            (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver,
+                            compression,
+                            serviceImpl::ztpAdd);
+                    break;
+                case METHODID_ZTP_UPDATE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRole) request,
+                            (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver,
+                            compression,
+                            serviceImpl::ztpUpdate);
+                    break;
+                case METHODID_ZTP_DELETE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((automation.Automation.DeviceRole) request,
+                            (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver,
+                            compression,
+                            serviceImpl::ztpDelete);
+                    break;
+                case METHODID_ZTP_DELETE_ALL_BY_DEVICE_ID:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<automation.Automation.DeviceRoleState>) responseObserver,
+                            compression,
+                            serviceImpl::ztpDeleteAllByDeviceId);
+                    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/automation/target/generated-sources/grpc/context/ContextOuterClass.java b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
new file mode 100644
index 0000000000000000000000000000000000000000..473bfa689e1a6df4d08ed8ddb76c746969f317dd
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/context/ContextOuterClass.java
@@ -0,0 +1,36586 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: context.proto
+
+package context;
+
+public final class ContextOuterClass {
+  private ContextOuterClass() {}
+  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 context.EventTypeEnum}
+   */
+  public enum EventTypeEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>EVENTTYPE_UNDEFINED = 0;</code>
+     */
+    EVENTTYPE_UNDEFINED(0),
+    /**
+     * <code>EVENTTYPE_CREATE = 1;</code>
+     */
+    EVENTTYPE_CREATE(1),
+    /**
+     * <code>EVENTTYPE_UPDATE = 2;</code>
+     */
+    EVENTTYPE_UPDATE(2),
+    /**
+     * <code>EVENTTYPE_REMOVE = 3;</code>
+     */
+    EVENTTYPE_REMOVE(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>EVENTTYPE_UNDEFINED = 0;</code>
+     */
+    public static final int EVENTTYPE_UNDEFINED_VALUE = 0;
+    /**
+     * <code>EVENTTYPE_CREATE = 1;</code>
+     */
+    public static final int EVENTTYPE_CREATE_VALUE = 1;
+    /**
+     * <code>EVENTTYPE_UPDATE = 2;</code>
+     */
+    public static final int EVENTTYPE_UPDATE_VALUE = 2;
+    /**
+     * <code>EVENTTYPE_REMOVE = 3;</code>
+     */
+    public static final int EVENTTYPE_REMOVE_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 EventTypeEnum 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 EventTypeEnum forNumber(int value) {
+      switch (value) {
+        case 0: return EVENTTYPE_UNDEFINED;
+        case 1: return EVENTTYPE_CREATE;
+        case 2: return EVENTTYPE_UPDATE;
+        case 3: return EVENTTYPE_REMOVE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        EventTypeEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<EventTypeEnum>() {
+            public EventTypeEnum findValueByNumber(int number) {
+              return EventTypeEnum.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(0);
+    }
+
+    private static final EventTypeEnum[] VALUES = values();
+
+    public static EventTypeEnum 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 EventTypeEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.EventTypeEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.DeviceDriverEnum}
+   */
+  public enum DeviceDriverEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <pre>
+     * also used for emulated
+     * </pre>
+     *
+     * <code>DEVICEDRIVER_UNDEFINED = 0;</code>
+     */
+    DEVICEDRIVER_UNDEFINED(0),
+    /**
+     * <code>DEVICEDRIVER_OPENCONFIG = 1;</code>
+     */
+    DEVICEDRIVER_OPENCONFIG(1),
+    /**
+     * <code>DEVICEDRIVER_TRANSPORT_API = 2;</code>
+     */
+    DEVICEDRIVER_TRANSPORT_API(2),
+    /**
+     * <code>DEVICEDRIVER_P4 = 3;</code>
+     */
+    DEVICEDRIVER_P4(3),
+    /**
+     * <code>DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4;</code>
+     */
+    DEVICEDRIVER_IETF_NETWORK_TOPOLOGY(4),
+    /**
+     * <code>DEVICEDRIVER_ONF_TR_352 = 5;</code>
+     */
+    DEVICEDRIVER_ONF_TR_352(5),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <pre>
+     * also used for emulated
+     * </pre>
+     *
+     * <code>DEVICEDRIVER_UNDEFINED = 0;</code>
+     */
+    public static final int DEVICEDRIVER_UNDEFINED_VALUE = 0;
+    /**
+     * <code>DEVICEDRIVER_OPENCONFIG = 1;</code>
+     */
+    public static final int DEVICEDRIVER_OPENCONFIG_VALUE = 1;
+    /**
+     * <code>DEVICEDRIVER_TRANSPORT_API = 2;</code>
+     */
+    public static final int DEVICEDRIVER_TRANSPORT_API_VALUE = 2;
+    /**
+     * <code>DEVICEDRIVER_P4 = 3;</code>
+     */
+    public static final int DEVICEDRIVER_P4_VALUE = 3;
+    /**
+     * <code>DEVICEDRIVER_IETF_NETWORK_TOPOLOGY = 4;</code>
+     */
+    public static final int DEVICEDRIVER_IETF_NETWORK_TOPOLOGY_VALUE = 4;
+    /**
+     * <code>DEVICEDRIVER_ONF_TR_352 = 5;</code>
+     */
+    public static final int DEVICEDRIVER_ONF_TR_352_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 DeviceDriverEnum 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 DeviceDriverEnum forNumber(int value) {
+      switch (value) {
+        case 0: return DEVICEDRIVER_UNDEFINED;
+        case 1: return DEVICEDRIVER_OPENCONFIG;
+        case 2: return DEVICEDRIVER_TRANSPORT_API;
+        case 3: return DEVICEDRIVER_P4;
+        case 4: return DEVICEDRIVER_IETF_NETWORK_TOPOLOGY;
+        case 5: return DEVICEDRIVER_ONF_TR_352;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<DeviceDriverEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        DeviceDriverEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<DeviceDriverEnum>() {
+            public DeviceDriverEnum findValueByNumber(int number) {
+              return DeviceDriverEnum.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(1);
+    }
+
+    private static final DeviceDriverEnum[] VALUES = values();
+
+    public static DeviceDriverEnum 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 DeviceDriverEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.DeviceDriverEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.DeviceOperationalStatusEnum}
+   */
+  public enum DeviceOperationalStatusEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_UNDEFINED = 0;</code>
+     */
+    DEVICEOPERATIONALSTATUS_UNDEFINED(0),
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_DISABLED = 1;</code>
+     */
+    DEVICEOPERATIONALSTATUS_DISABLED(1),
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_ENABLED = 2;</code>
+     */
+    DEVICEOPERATIONALSTATUS_ENABLED(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_UNDEFINED = 0;</code>
+     */
+    public static final int DEVICEOPERATIONALSTATUS_UNDEFINED_VALUE = 0;
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_DISABLED = 1;</code>
+     */
+    public static final int DEVICEOPERATIONALSTATUS_DISABLED_VALUE = 1;
+    /**
+     * <code>DEVICEOPERATIONALSTATUS_ENABLED = 2;</code>
+     */
+    public static final int DEVICEOPERATIONALSTATUS_ENABLED_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 DeviceOperationalStatusEnum 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 DeviceOperationalStatusEnum forNumber(int value) {
+      switch (value) {
+        case 0: return DEVICEOPERATIONALSTATUS_UNDEFINED;
+        case 1: return DEVICEOPERATIONALSTATUS_DISABLED;
+        case 2: return DEVICEOPERATIONALSTATUS_ENABLED;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<DeviceOperationalStatusEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        DeviceOperationalStatusEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<DeviceOperationalStatusEnum>() {
+            public DeviceOperationalStatusEnum findValueByNumber(int number) {
+              return DeviceOperationalStatusEnum.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(2);
+    }
+
+    private static final DeviceOperationalStatusEnum[] VALUES = values();
+
+    public static DeviceOperationalStatusEnum 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 DeviceOperationalStatusEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.DeviceOperationalStatusEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.ServiceTypeEnum}
+   */
+  public enum ServiceTypeEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>SERVICETYPE_UNKNOWN = 0;</code>
+     */
+    SERVICETYPE_UNKNOWN(0),
+    /**
+     * <code>SERVICETYPE_L3NM = 1;</code>
+     */
+    SERVICETYPE_L3NM(1),
+    /**
+     * <code>SERVICETYPE_L2NM = 2;</code>
+     */
+    SERVICETYPE_L2NM(2),
+    /**
+     * <code>SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3;</code>
+     */
+    SERVICETYPE_TAPI_CONNECTIVITY_SERVICE(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>SERVICETYPE_UNKNOWN = 0;</code>
+     */
+    public static final int SERVICETYPE_UNKNOWN_VALUE = 0;
+    /**
+     * <code>SERVICETYPE_L3NM = 1;</code>
+     */
+    public static final int SERVICETYPE_L3NM_VALUE = 1;
+    /**
+     * <code>SERVICETYPE_L2NM = 2;</code>
+     */
+    public static final int SERVICETYPE_L2NM_VALUE = 2;
+    /**
+     * <code>SERVICETYPE_TAPI_CONNECTIVITY_SERVICE = 3;</code>
+     */
+    public static final int SERVICETYPE_TAPI_CONNECTIVITY_SERVICE_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 ServiceTypeEnum 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 ServiceTypeEnum forNumber(int value) {
+      switch (value) {
+        case 0: return SERVICETYPE_UNKNOWN;
+        case 1: return SERVICETYPE_L3NM;
+        case 2: return SERVICETYPE_L2NM;
+        case 3: return SERVICETYPE_TAPI_CONNECTIVITY_SERVICE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ServiceTypeEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ServiceTypeEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ServiceTypeEnum>() {
+            public ServiceTypeEnum findValueByNumber(int number) {
+              return ServiceTypeEnum.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(3);
+    }
+
+    private static final ServiceTypeEnum[] VALUES = values();
+
+    public static ServiceTypeEnum 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 ServiceTypeEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.ServiceTypeEnum)
+  }
+
+  /**
+   * Protobuf enum {@code context.ServiceStatusEnum}
+   */
+  public enum ServiceStatusEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>SERVICESTATUS_UNDEFINED = 0;</code>
+     */
+    SERVICESTATUS_UNDEFINED(0),
+    /**
+     * <code>SERVICESTATUS_PLANNED = 1;</code>
+     */
+    SERVICESTATUS_PLANNED(1),
+    /**
+     * <code>SERVICESTATUS_ACTIVE = 2;</code>
+     */
+    SERVICESTATUS_ACTIVE(2),
+    /**
+     * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
+     */
+    SERVICESTATUS_PENDING_REMOVAL(3),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>SERVICESTATUS_UNDEFINED = 0;</code>
+     */
+    public static final int SERVICESTATUS_UNDEFINED_VALUE = 0;
+    /**
+     * <code>SERVICESTATUS_PLANNED = 1;</code>
+     */
+    public static final int SERVICESTATUS_PLANNED_VALUE = 1;
+    /**
+     * <code>SERVICESTATUS_ACTIVE = 2;</code>
+     */
+    public static final int SERVICESTATUS_ACTIVE_VALUE = 2;
+    /**
+     * <code>SERVICESTATUS_PENDING_REMOVAL = 3;</code>
+     */
+    public static final int SERVICESTATUS_PENDING_REMOVAL_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 ServiceStatusEnum 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 ServiceStatusEnum forNumber(int value) {
+      switch (value) {
+        case 0: return SERVICESTATUS_UNDEFINED;
+        case 1: return SERVICESTATUS_PLANNED;
+        case 2: return SERVICESTATUS_ACTIVE;
+        case 3: return SERVICESTATUS_PENDING_REMOVAL;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ServiceStatusEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ServiceStatusEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ServiceStatusEnum>() {
+            public ServiceStatusEnum findValueByNumber(int number) {
+              return ServiceStatusEnum.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(4);
+    }
+
+    private static final ServiceStatusEnum[] VALUES = values();
+
+    public static ServiceStatusEnum 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 ServiceStatusEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.ServiceStatusEnum)
+  }
+
+  /**
+   * <pre>
+   * ----- Configuration -------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf enum {@code context.ConfigActionEnum}
+   */
+  public enum ConfigActionEnum
+      implements com.google.protobuf.ProtocolMessageEnum {
+    /**
+     * <code>CONFIGACTION_UNDEFINED = 0;</code>
+     */
+    CONFIGACTION_UNDEFINED(0),
+    /**
+     * <code>CONFIGACTION_SET = 1;</code>
+     */
+    CONFIGACTION_SET(1),
+    /**
+     * <code>CONFIGACTION_DELETE = 2;</code>
+     */
+    CONFIGACTION_DELETE(2),
+    UNRECOGNIZED(-1),
+    ;
+
+    /**
+     * <code>CONFIGACTION_UNDEFINED = 0;</code>
+     */
+    public static final int CONFIGACTION_UNDEFINED_VALUE = 0;
+    /**
+     * <code>CONFIGACTION_SET = 1;</code>
+     */
+    public static final int CONFIGACTION_SET_VALUE = 1;
+    /**
+     * <code>CONFIGACTION_DELETE = 2;</code>
+     */
+    public static final int CONFIGACTION_DELETE_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 ConfigActionEnum 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 ConfigActionEnum forNumber(int value) {
+      switch (value) {
+        case 0: return CONFIGACTION_UNDEFINED;
+        case 1: return CONFIGACTION_SET;
+        case 2: return CONFIGACTION_DELETE;
+        default: return null;
+      }
+    }
+
+    public static com.google.protobuf.Internal.EnumLiteMap<ConfigActionEnum>
+        internalGetValueMap() {
+      return internalValueMap;
+    }
+    private static final com.google.protobuf.Internal.EnumLiteMap<
+        ConfigActionEnum> internalValueMap =
+          new com.google.protobuf.Internal.EnumLiteMap<ConfigActionEnum>() {
+            public ConfigActionEnum findValueByNumber(int number) {
+              return ConfigActionEnum.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(5);
+    }
+
+    private static final ConfigActionEnum[] VALUES = values();
+
+    public static ConfigActionEnum 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 ConfigActionEnum(int value) {
+      this.value = value;
+    }
+
+    // @@protoc_insertion_point(enum_scope:context.ConfigActionEnum)
+  }
+
+  public interface EmptyOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Empty)
+      com.google.protobuf.MessageOrBuilder {
+  }
+  /**
+   * <pre>
+   * ----- Generic -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Empty}
+   */
+  public static final class Empty extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Empty)
+      EmptyOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Empty.newBuilder() to construct.
+    private Empty(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Empty() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Empty();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Empty(
+        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;
+            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_Empty_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Empty_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Empty.class, context.ContextOuterClass.Empty.Builder.class);
+    }
+
+    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 {
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      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.Empty)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Empty other = (context.ContextOuterClass.Empty) obj;
+
+      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 = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Empty parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Empty 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.Empty parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Empty parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Empty 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.Empty parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Empty 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.Empty parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Empty 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.Empty 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>
+     * ----- Generic -------------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Empty}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Empty)
+        context.ContextOuterClass.EmptyOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Empty_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Empty_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Empty.class, context.ContextOuterClass.Empty.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Empty.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();
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Empty_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Empty getDefaultInstanceForType() {
+        return context.ContextOuterClass.Empty.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Empty build() {
+        context.ContextOuterClass.Empty result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Empty buildPartial() {
+        context.ContextOuterClass.Empty result = new context.ContextOuterClass.Empty(this);
+        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.Empty) {
+          return mergeFrom((context.ContextOuterClass.Empty)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Empty other) {
+        if (other == context.ContextOuterClass.Empty.getDefaultInstance()) return this;
+        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.Empty parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Empty) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        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.Empty)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Empty)
+    private static final context.ContextOuterClass.Empty DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Empty();
+    }
+
+    public static context.ContextOuterClass.Empty getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Empty>
+        PARSER = new com.google.protobuf.AbstractParser<Empty>() {
+      @java.lang.Override
+      public Empty parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Empty(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Empty> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Empty> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Empty getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface UuidOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Uuid)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The uuid.
+     */
+    java.lang.String getUuid();
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The bytes for uuid.
+     */
+    com.google.protobuf.ByteString
+        getUuidBytes();
+  }
+  /**
+   * Protobuf type {@code context.Uuid}
+   */
+  public static final class Uuid extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Uuid)
+      UuidOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Uuid.newBuilder() to construct.
+    private Uuid(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Uuid() {
+      uuid_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Uuid();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Uuid(
+        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: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              uuid_ = 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 context.ContextOuterClass.internal_static_context_Uuid_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Uuid_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Uuid.class, context.ContextOuterClass.Uuid.Builder.class);
+    }
+
+    public static final int UUID_FIELD_NUMBER = 1;
+    private volatile java.lang.Object uuid_;
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The uuid.
+     */
+    @java.lang.Override
+    public java.lang.String getUuid() {
+      java.lang.Object ref = uuid_;
+      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();
+        uuid_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string uuid = 1;</code>
+     * @return The bytes for uuid.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getUuidBytes() {
+      java.lang.Object ref = uuid_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        uuid_ = 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 (!getUuidBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uuid_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getUuidBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uuid_);
+      }
+      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.Uuid)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Uuid other = (context.ContextOuterClass.Uuid) obj;
+
+      if (!getUuid()
+          .equals(other.getUuid())) 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) + UUID_FIELD_NUMBER;
+      hash = (53 * hash) + getUuid().hashCode();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Uuid parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Uuid 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.Uuid parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Uuid parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Uuid 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.Uuid parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Uuid 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.Uuid parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Uuid 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.Uuid 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.Uuid}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Uuid)
+        context.ContextOuterClass.UuidOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Uuid_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Uuid_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Uuid.class, context.ContextOuterClass.Uuid.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Uuid.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();
+        uuid_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Uuid_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Uuid getDefaultInstanceForType() {
+        return context.ContextOuterClass.Uuid.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Uuid build() {
+        context.ContextOuterClass.Uuid result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Uuid buildPartial() {
+        context.ContextOuterClass.Uuid result = new context.ContextOuterClass.Uuid(this);
+        result.uuid_ = uuid_;
+        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.Uuid) {
+          return mergeFrom((context.ContextOuterClass.Uuid)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Uuid other) {
+        if (other == context.ContextOuterClass.Uuid.getDefaultInstance()) return this;
+        if (!other.getUuid().isEmpty()) {
+          uuid_ = other.uuid_;
+          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 {
+        context.ContextOuterClass.Uuid parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Uuid) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private java.lang.Object uuid_ = "";
+      /**
+       * <code>string uuid = 1;</code>
+       * @return The uuid.
+       */
+      public java.lang.String getUuid() {
+        java.lang.Object ref = uuid_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          uuid_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @return The bytes for uuid.
+       */
+      public com.google.protobuf.ByteString
+          getUuidBytes() {
+        java.lang.Object ref = uuid_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          uuid_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @param value The uuid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUuid(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        uuid_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearUuid() {
+        
+        uuid_ = getDefaultInstance().getUuid();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string uuid = 1;</code>
+       * @param value The bytes for uuid to set.
+       * @return This builder for chaining.
+       */
+      public Builder setUuidBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        uuid_ = 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.Uuid)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Uuid)
+    private static final context.ContextOuterClass.Uuid DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Uuid();
+    }
+
+    public static context.ContextOuterClass.Uuid getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Uuid>
+        PARSER = new com.google.protobuf.AbstractParser<Uuid>() {
+      @java.lang.Override
+      public Uuid parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Uuid(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Uuid> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Uuid> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Event)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>double timestamp = 1;</code>
+     * @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}
+   */
+  public static final class Event extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Event)
+      EventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Event.newBuilder() to construct.
+    private Event(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Event() {
+      eventType_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Event();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Event(
+        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 9: {
+
+              timestamp_ = input.readDouble();
+              break;
+            }
+            case 16: {
+              int rawValue = input.readEnum();
+
+              eventType_ = 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 context.ContextOuterClass.internal_static_context_Event_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+    }
+
+    public static final int TIMESTAMP_FIELD_NUMBER = 1;
+    private double timestamp_;
+    /**
+     * <code>double timestamp = 1;</code>
+     * @return The timestamp.
+     */
+    @java.lang.Override
+    public double getTimestamp() {
+      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() {
+      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 (timestamp_ != 0D) {
+        output.writeDouble(1, timestamp_);
+      }
+      if (eventType_ != context.ContextOuterClass.EventTypeEnum.EVENTTYPE_UNDEFINED.getNumber()) {
+        output.writeEnum(2, eventType_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (timestamp_ != 0D) {
+        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;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Event)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Event other = (context.ContextOuterClass.Event) 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;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      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(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Event parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Event parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Event parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.Event parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.Event parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Event 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.Event 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.Event}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_Event_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Event_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Event.class, context.ContextOuterClass.Event.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Event.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();
+        timestamp_ = 0D;
+
+        eventType_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Event_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Event getDefaultInstanceForType() {
+        return context.ContextOuterClass.Event.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Event build() {
+        context.ContextOuterClass.Event result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Event buildPartial() {
+        context.ContextOuterClass.Event result = new context.ContextOuterClass.Event(this);
+        result.timestamp_ = timestamp_;
+        result.eventType_ = eventType_;
+        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.Event) {
+          return mergeFrom((context.ContextOuterClass.Event)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.Event other) {
+        if (other == context.ContextOuterClass.Event.getDefaultInstance()) return this;
+        if (other.getTimestamp() != 0D) {
+          setTimestamp(other.getTimestamp());
+        }
+        if (other.eventType_ != 0) {
+          setEventTypeValue(other.getEventTypeValue());
+        }
+        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.Event parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Event) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private double timestamp_ ;
+      /**
+       * <code>double timestamp = 1;</code>
+       * @return The timestamp.
+       */
+      @java.lang.Override
+      public double getTimestamp() {
+        return timestamp_;
+      }
+      /**
+       * <code>double timestamp = 1;</code>
+       * @param value The timestamp to set.
+       * @return This builder for chaining.
+       */
+      public Builder setTimestamp(double value) {
+        
+        timestamp_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>double timestamp = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearTimestamp() {
+        
+        timestamp_ = 0D;
+        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) {
+        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.Event)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Event)
+    private static final context.ContextOuterClass.Event DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Event();
+    }
+
+    public static context.ContextOuterClass.Event getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Event>
+        PARSER = new com.google.protobuf.AbstractParser<Event>() {
+      @java.lang.Override
+      public Event parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Event(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Event> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Event> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Event getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ContextIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ContextId)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
+     */
+    boolean hasContextUuid();
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
+     */
+    context.ContextOuterClass.Uuid getContextUuid();
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Context -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ContextId}
+   */
+  public static final class ContextId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ContextId)
+      ContextIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ContextId.newBuilder() to construct.
+    private ContextId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ContextId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ContextId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ContextId(
+        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 (contextUuid_ != null) {
+                subBuilder = contextUuid_.toBuilder();
+              }
+              contextUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(contextUuid_);
+                contextUuid_ = 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_ContextId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+    }
+
+    public static final int CONTEXT_UUID_FIELD_NUMBER = 1;
+    private context.ContextOuterClass.Uuid contextUuid_;
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return Whether the contextUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasContextUuid() {
+      return contextUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     * @return The contextUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getContextUuid() {
+      return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+    }
+    /**
+     * <code>.context.Uuid context_uuid = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+      return getContextUuid();
+    }
+
+    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 (contextUuid_ != null) {
+        output.writeMessage(1, getContextUuid());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (contextUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getContextUuid());
+      }
+      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.ContextId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ContextId other = (context.ContextOuterClass.ContextId) obj;
+
+      if (hasContextUuid() != other.hasContextUuid()) return false;
+      if (hasContextUuid()) {
+        if (!getContextUuid()
+            .equals(other.getContextUuid())) 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 (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.ContextId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ContextId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ContextId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ContextId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ContextId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ContextId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ContextId 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.ContextId 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>
+     * ----- 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.ContextId)
+        context.ContextOuterClass.ContextIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ContextId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ContextId.class, context.ContextOuterClass.ContextId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ContextId.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 (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
+        } else {
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ContextId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ContextId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextId build() {
+        context.ContextOuterClass.ContextId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ContextId buildPartial() {
+        context.ContextOuterClass.ContextId result = new context.ContextOuterClass.ContextId(this);
+        if (contextUuidBuilder_ == null) {
+          result.contextUuid_ = contextUuid_;
+        } else {
+          result.contextUuid_ = contextUuidBuilder_.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.ContextId) {
+          return mergeFrom((context.ContextOuterClass.ContextId)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());
+        }
+        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.ContextId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ContextId) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private context.ContextOuterClass.Uuid contextUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> contextUuidBuilder_;
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return Whether the contextUuid field is set.
+       */
+      public boolean hasContextUuid() {
+        return contextUuidBuilder_ != null || contextUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       * @return The contextUuid.
+       */
+      public context.ContextOuterClass.Uuid getContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          return contextUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+        } else {
+          return contextUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder setContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          contextUuid_ = value;
+          onChanged();
+        } else {
+          contextUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder setContextUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          contextUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder mergeContextUuid(context.ContextOuterClass.Uuid value) {
+        if (contextUuidBuilder_ == null) {
+          if (contextUuid_ != null) {
+            contextUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(contextUuid_).mergeFrom(value).buildPartial();
+          } else {
+            contextUuid_ = value;
+          }
+          onChanged();
+        } else {
+          contextUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public Builder clearContextUuid() {
+        if (contextUuidBuilder_ == null) {
+          contextUuid_ = null;
+          onChanged();
+        } else {
+          contextUuid_ = null;
+          contextUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getContextUuidBuilder() {
+        
+        onChanged();
+        return getContextUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getContextUuidOrBuilder() {
+        if (contextUuidBuilder_ != null) {
+          return contextUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return contextUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : contextUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid context_uuid = 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(),
+                  getParentForChildren(),
+                  isClean());
+          contextUuid_ = null;
+        }
+        return contextUuidBuilder_;
+      }
+      @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.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);
+      }
+    };
+
+    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 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>
+       */
+      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) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (eventBuilder_ == null) {
+          event_ = null;
+        } else {
+          event_ = null;
+          eventBuilder_ = null;
+        }
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+        } else {
+          deviceId_ = null;
+          deviceIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @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 {
+          result.event_ = eventBuilder_.build();
+        }
+        if (deviceIdBuilder_ == null) {
+          result.deviceId_ = deviceId_;
+        } else {
+          result.deviceId_ = deviceIdBuilder_.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.DeviceEvent) {
+          return mergeFrom((context.ContextOuterClass.DeviceEvent)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());
+        }
+        if (other.hasDeviceId()) {
+          mergeDeviceId(other.getDeviceId());
+        }
+        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.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);
+          }
+        }
+        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.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;
+      }
+      /**
+       * <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();
+        }
+      }
+      /**
+       * <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());
+        }
+
+        return this;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          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) {
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
+        } else {
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId build() {
+        context.ContextOuterClass.LinkId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkId buildPartial() {
+        context.ContextOuterClass.LinkId result = new context.ContextOuterClass.LinkId(this);
+        if (linkUuidBuilder_ == null) {
+          result.linkUuid_ = linkUuid_;
+        } else {
+          result.linkUuid_ = linkUuidBuilder_.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.LinkId) {
+          return mergeFrom((context.ContextOuterClass.LinkId)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      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;
+      }
+
+      @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.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 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.
+       */
+      public boolean hasLinkUuid() {
+        return linkUuidBuilder_ != null || linkUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       * @return The linkUuid.
+       */
+      public context.ContextOuterClass.Uuid getLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          return linkUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+        } else {
+          return linkUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder setLinkUuid(context.ContextOuterClass.Uuid value) {
+        if (linkUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          linkUuid_ = value;
+          onChanged();
+        } else {
+          linkUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder setLinkUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          linkUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</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;
+          }
+          onChanged();
+        } else {
+          linkUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public Builder clearLinkUuid() {
+        if (linkUuidBuilder_ == null) {
+          linkUuid_ = null;
+          onChanged();
+        } else {
+          linkUuid_ = null;
+          linkUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getLinkUuidBuilder() {
+        
+        onChanged();
+        return getLinkUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getLinkUuidOrBuilder() {
+        if (linkUuidBuilder_ != null) {
+          return linkUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return linkUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : linkUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid link_uuid = 1;</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_);
+        }
+        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;
+      }
+
+      @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);
+      }
+
+      // Construct using context.ContextOuterClass.Link.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getLinkEndpointIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          linkEndpointIdsBuilder_.clear();
+        }
+        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);
+        }
+        return result;
+      }
+
+      @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_;
+        } else {
+          result.linkId_ = linkIdBuilder_.build();
+        }
+        if (linkEndpointIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            linkEndpointIds_ = java.util.Collections.unmodifiableList(linkEndpointIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.linkEndpointIds_ = linkEndpointIds_;
+        } else {
+          result.linkEndpointIds_ = linkEndpointIdsBuilder_.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.Link) {
+          return mergeFrom((context.ContextOuterClass.Link)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      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 {
+              ensureLinkEndpointIdsIsMutable();
+              linkEndpointIds_.addAll(other.linkEndpointIds_);
+            }
+            onChanged();
+          }
+        } 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_);
+            }
+          }
+        }
+        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.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);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      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 ensureLinkEndpointIdsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          linkEndpointIds_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(linkEndpointIds_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      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>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getLinkEndpointIdsList() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+        } else {
+          return linkEndpointIdsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public int getLinkEndpointIdsCount() {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.size();
+        } else {
+          return linkEndpointIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId getLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);
+        } else {
+          return linkEndpointIdsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, value);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder setLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(value);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (linkEndpointIdsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(index, value);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addLinkEndpointIds(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</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());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder addAllLinkEndpointIds(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, linkEndpointIds_);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder clearLinkEndpointIds() {
+        if (linkEndpointIdsBuilder_ == null) {
+          linkEndpointIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public Builder removeLinkEndpointIds(int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          ensureLinkEndpointIdsIsMutable();
+          linkEndpointIds_.remove(index);
+          onChanged();
+        } else {
+          linkEndpointIdsBuilder_.remove(index);
+        }
+        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>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getLinkEndpointIdsOrBuilder(
+          int index) {
+        if (linkEndpointIdsBuilder_ == null) {
+          return linkEndpointIds_.get(index);  } else {
+          return linkEndpointIdsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getLinkEndpointIdsOrBuilderList() {
+        if (linkEndpointIdsBuilder_ != null) {
+          return linkEndpointIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(linkEndpointIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder() {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addLinkEndpointIdsBuilder(
+          int index) {
+        return getLinkEndpointIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId link_endpoint_ids = 2;</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),
+                  getParentForChildren(),
+                  isClean());
+          linkEndpointIds_ = null;
+        }
+        return linkEndpointIdsBuilder_;
+      }
+      @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.Link)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Link)
+    private static final context.ContextOuterClass.Link DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Link();
+    }
+
+    public static context.ContextOuterClass.Link getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Link>
+        PARSER = new com.google.protobuf.AbstractParser<Link>() {
+      @java.lang.Override
+      public Link parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Link(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Link> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Link> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Link getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.LinkId> 
+        getLinkIdsList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    context.ContextOuterClass.LinkId getLinkIds(int index);
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    int getLinkIdsCount();
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList();
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.LinkIdList}
+   */
+  public static final class LinkIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkIdList)
+      LinkIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkIdList.newBuilder() to construct.
+    private LinkIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkIdList() {
+      linkIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkIdList(
+        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)) {
+                linkIds_ = new java.util.ArrayList<context.ContextOuterClass.LinkId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              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)) {
+          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;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+    }
+
+    public static final int LINK_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.LinkId> linkIds_;
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.LinkId> getLinkIdsList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.LinkIdOrBuilder> 
+        getLinkIdsOrBuilderList() {
+      return linkIds_;
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getLinkIdsCount() {
+      return linkIds_.size();
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkId getLinkIds(int index) {
+      return linkIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.LinkId link_ids = 1;</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 {
+      for (int i = 0; i < linkIds_.size(); i++) {
+        output.writeMessage(1, linkIds_.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 < linkIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, 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.LinkIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkIdList other = (context.ContextOuterClass.LinkIdList) obj;
+
+      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 (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.LinkIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.LinkIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.LinkIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkIdList 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.LinkIdList 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.LinkIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_LinkIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkIdList.class, context.ContextOuterClass.LinkIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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);
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkIdList build() {
+        context.ContextOuterClass.LinkIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        } 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.LinkIdList) {
+          return mergeFrom((context.ContextOuterClass.LinkIdList)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_);
+            }
+          }
+        }
+        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.LinkIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        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_;
+
+      /**
+       * <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>
+       */
+      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 = 1;</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 = 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);
+          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());
+          onChanged();
+        } else {
+          linkIdsBuilder_.addMessage(index, builderForValue.build());
+        }
+        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_);
+          onChanged();
+        } else {
+          linkIdsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public Builder clearLinkIds() {
+        if (linkIdsBuilder_ == null) {
+          linkIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          linkIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</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 = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</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 = 1;</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 = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder() {
+        return getLinkIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder addLinkIdsBuilder(
+          int index) {
+        return getLinkIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.LinkId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.LinkId link_ids = 1;</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_ & 0x00000001) != 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.LinkIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkIdList)
+    private static final context.ContextOuterClass.LinkIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkIdList();
+    }
+
+    public static context.ContextOuterClass.LinkIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkIdList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkIdList>() {
+      @java.lang.Override
+      public LinkIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkList)
+      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>
+     */
+    java.util.List<? extends context.ContextOuterClass.LinkOrBuilder> 
+        getLinksOrBuilderList();
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.LinkList}
+   */
+  public static final class LinkList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkList)
+      LinkListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkList.newBuilder() to construct.
+    private LinkList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkList() {
+      links_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkList(
+        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)) {
+                links_ = new java.util.ArrayList<context.ContextOuterClass.Link>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              links_.add(
+                  input.readMessage(context.ContextOuterClass.Link.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)) {
+          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;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.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();
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Link getLinks(int index) {
+      return links_.get(index);
+    }
+    /**
+     * <code>repeated .context.Link links = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkOrBuilder getLinksOrBuilder(
+        int index) {
+      return links_.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 < links_.size(); i++) {
+        output.writeMessage(1, links_.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 < links_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, links_.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.LinkList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkList other = (context.ContextOuterClass.LinkList) obj;
+
+      if (!getLinksList()
+          .equals(other.getLinksList())) 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 (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.LinkList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.LinkList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.LinkList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkList 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.LinkList 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.LinkList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_LinkList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkList.class, context.ContextOuterClass.LinkList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkList build() {
+        context.ContextOuterClass.LinkList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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();
+        }
+        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.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;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder addLinks(
+          context.ContextOuterClass.Link.Builder builderForValue) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.add(builderForValue.build());
+          onChanged();
+        } else {
+          linksBuilder_.addMessage(builderForValue.build());
+        }
+        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());
+        }
+        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;
+      }
+      /**
+       * <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();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public Builder removeLinks(int index) {
+        if (linksBuilder_ == null) {
+          ensureLinksIsMutable();
+          links_.remove(index);
+          onChanged();
+        } else {
+          linksBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      public context.ContextOuterClass.Link.Builder getLinksBuilder(
+          int index) {
+        return getLinksFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Link links = 1;</code>
+       */
+      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 java.util.Collections.unmodifiableList(links_);
+        }
+      }
+      /**
+       * <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>
+       */
+      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_;
+      }
+      @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.LinkList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkList)
+    private static final context.ContextOuterClass.LinkList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkList();
+    }
+
+    public static context.ContextOuterClass.LinkList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkList>
+        PARSER = new com.google.protobuf.AbstractParser<LinkList>() {
+      @java.lang.Override
+      public LinkList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface LinkEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.LinkEvent)
+      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.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
+     */
+    boolean hasLinkId();
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return The linkId.
+     */
+    context.ContextOuterClass.LinkId getLinkId();
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     */
+    context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder();
+  }
+  /**
+   * Protobuf type {@code context.LinkEvent}
+   */
+  public static final class LinkEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.LinkEvent)
+      LinkEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use LinkEvent.newBuilder() to construct.
+    private LinkEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private LinkEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new LinkEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private LinkEvent(
+        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.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;
+            }
+            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_LinkEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.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 LINK_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.LinkId linkId_;
+    /**
+     * <code>.context.LinkId link_id = 2;</code>
+     * @return Whether the linkId field is set.
+     */
+    @java.lang.Override
+    public boolean hasLinkId() {
+      return linkId_ != null;
+    }
+    /**
+     * <code>.context.LinkId link_id = 2;</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 = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.LinkIdOrBuilder getLinkIdOrBuilder() {
+      return getLinkId();
+    }
+
+    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 (linkId_ != null) {
+        output.writeMessage(2, getLinkId());
+      }
+      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 (linkId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getLinkId());
+      }
+      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.LinkEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.LinkEvent other = (context.ContextOuterClass.LinkEvent) 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 (!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 (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.LinkEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.LinkEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.LinkEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.LinkEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.LinkEvent 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.LinkEvent 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.LinkEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_LinkEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.LinkEvent.class, context.ContextOuterClass.LinkEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.LinkEvent.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 (linkIdBuilder_ == null) {
+          linkId_ = null;
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_LinkEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.LinkEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.LinkEvent build() {
+        context.ContextOuterClass.LinkEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        } else {
+          result.linkId_ = linkIdBuilder_.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.LinkEvent) {
+          return mergeFrom((context.ContextOuterClass.LinkEvent)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());
+        }
+        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.LinkEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.LinkEvent) 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.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;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</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 = 2;</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 = 2;</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 = 2;</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 = 2;</code>
+       */
+      public Builder clearLinkId() {
+        if (linkIdBuilder_ == null) {
+          linkId_ = null;
+          onChanged();
+        } else {
+          linkId_ = null;
+          linkIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</code>
+       */
+      public context.ContextOuterClass.LinkId.Builder getLinkIdBuilder() {
+        
+        onChanged();
+        return getLinkIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.LinkId link_id = 2;</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 = 2;</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_;
+      }
+      @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.LinkEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.LinkEvent)
+    private static final context.ContextOuterClass.LinkEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.LinkEvent();
+    }
+
+    public static context.ContextOuterClass.LinkEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<LinkEvent>
+        PARSER = new com.google.protobuf.AbstractParser<LinkEvent>() {
+      @java.lang.Override
+      public LinkEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new LinkEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<LinkEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<LinkEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.LinkEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceId)
+      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 service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
+     */
+    boolean hasServiceUuid();
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
+     */
+    context.ContextOuterClass.Uuid getServiceUuid();
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     */
+    context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Service -------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.ServiceId}
+   */
+  public static final class ServiceId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceId)
+      ServiceIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceId.newBuilder() to construct.
+    private ServiceId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceId(
+        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 (serviceUuid_ != null) {
+                subBuilder = serviceUuid_.toBuilder();
+              }
+              serviceUuid_ = input.readMessage(context.ContextOuterClass.Uuid.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(serviceUuid_);
+                serviceUuid_ = 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_ServiceId_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.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 SERVICE_UUID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.Uuid serviceUuid_;
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return Whether the serviceUuid field is set.
+     */
+    @java.lang.Override
+    public boolean hasServiceUuid() {
+      return serviceUuid_ != null;
+    }
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     * @return The serviceUuid.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Uuid getServiceUuid() {
+      return serviceUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+    }
+    /**
+     * <code>.context.Uuid service_uuid = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+      return getServiceUuid();
+    }
+
+    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 (serviceUuid_ != null) {
+        output.writeMessage(2, getServiceUuid());
+      }
+      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 (serviceUuid_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceUuid());
+      }
+      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.ServiceId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceId other = (context.ContextOuterClass.ServiceId) 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 (!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 (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.ServiceId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ServiceId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ServiceId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceId 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.ServiceId 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>
+     * ----- 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.ServiceId)
+        context.ContextOuterClass.ServiceIdOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceId.class, context.ContextOuterClass.ServiceId.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceId.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 (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+        } else {
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceId build() {
+        context.ContextOuterClass.ServiceId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        } else {
+          result.serviceUuid_ = serviceUuidBuilder_.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.ServiceId) {
+          return mergeFrom((context.ContextOuterClass.ServiceId)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());
+        }
+        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.ServiceId parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceId) 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 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;
+      }
+      /**
+       * <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 {
+          return serviceUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder setServiceUuid(context.ContextOuterClass.Uuid value) {
+        if (serviceUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceUuid_ = value;
+          onChanged();
+        } else {
+          serviceUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder setServiceUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</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);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public Builder clearServiceUuid() {
+        if (serviceUuidBuilder_ == null) {
+          serviceUuid_ = null;
+          onChanged();
+        } else {
+          serviceUuid_ = null;
+          serviceUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getServiceUuidBuilder() {
+        
+        onChanged();
+        return getServiceUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getServiceUuidOrBuilder() {
+        if (serviceUuidBuilder_ != null) {
+          return serviceUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : serviceUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid service_uuid = 2;</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(),
+                  getParentForChildren(),
+                  isClean());
+          serviceUuid_ = null;
+        }
+        return serviceUuidBuilder_;
+      }
+      @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.ServiceId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceId)
+    private static final context.ContextOuterClass.ServiceId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceId();
+    }
+
+    public static context.ContextOuterClass.ServiceId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceId>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceId>() {
+      @java.lang.Override
+      public ServiceId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId 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);
+
+    /**
+     * <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();
+  }
+  /**
+   * Protobuf type {@code context.Service}
+   */
+  public static final class Service extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Service)
+      ServiceOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Service.newBuilder() to construct.
+    private Service(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    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 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();
+              }
+
+              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)) {
+          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;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_Service_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);
+    }
+
+    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();
+    }
+
+    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 (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());
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      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) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(5, getServiceStatus());
+      }
+      if (serviceConfig_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(6, getServiceConfig());
+      }
+      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.Service)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Service other = (context.ContextOuterClass.Service) 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 (hasServiceConfig() != other.hasServiceConfig()) return false;
+      if (hasServiceConfig()) {
+        if (!getServiceConfig()
+            .equals(other.getServiceConfig())) 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 (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();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Service parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Service parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Service parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.Service parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.Service parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.Service parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Service 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.Service 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.Service}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_Service_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Service_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Service.class, context.ContextOuterClass.Service.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Service.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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;
+        } else {
+          serviceStatus_ = null;
+          serviceStatusBuilder_ = null;
+        }
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_Service_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service getDefaultInstanceForType() {
+        return context.ContextOuterClass.Service.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.Service build() {
+        context.ContextOuterClass.Service result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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_;
+        } else {
+          result.serviceStatus_ = serviceStatusBuilder_.build();
+        }
+        if (serviceConfigBuilder_ == null) {
+          result.serviceConfig_ = serviceConfig_;
+        } else {
+          result.serviceConfig_ = serviceConfigBuilder_.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.Service) {
+          return mergeFrom((context.ContextOuterClass.Service)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());
+        }
+        if (other.hasServiceConfig()) {
+          mergeServiceConfig(other.getServiceConfig());
+        }
+        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.Service parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.Service) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+      private int bitField0_;
+
+      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 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);
+        }
+      }
+      /**
+       * <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 {
+          serviceConstraintsBuilder_.addMessage(value);
+        }
+        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>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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <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);
+        }
+        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();
+        } else {
+          serviceConstraintsBuilder_.clear();
+        }
+        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;
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder getServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <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);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConstraintOrBuilder> 
+           getServiceConstraintsOrBuilderList() {
+        if (serviceConstraintsBuilder_ != null) {
+          return serviceConstraintsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(serviceConstraints_);
+        }
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder() {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public context.ContextOuterClass.Constraint.Builder addServiceConstraintsBuilder(
+          int index) {
+        return getServiceConstraintsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Constraint.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Constraint service_constraints = 4;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Constraint.Builder> 
+           getServiceConstraintsBuilderList() {
+        return getServiceConstraintsFieldBuilder().getBuilderList();
+      }
+      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_;
+      }
+
+      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;
+      }
+      /**
+       * <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();
+        }
+      }
+      /**
+       * <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 {
+          serviceStatusBuilder_.setMessage(value);
+        }
+
+        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);
+        }
+
+        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_;
+        }
+      }
+      /**
+       * <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;
+        }
+        return serviceStatusBuilder_;
+      }
+
+      private context.ContextOuterClass.ServiceConfig serviceConfig_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceConfig, context.ContextOuterClass.ServiceConfig.Builder, context.ContextOuterClass.ServiceConfigOrBuilder> serviceConfigBuilder_;
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       * @return Whether the serviceConfig field is set.
+       */
+      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 serviceConfigBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder setServiceConfig(context.ContextOuterClass.ServiceConfig value) {
+        if (serviceConfigBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceConfig_ = value;
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder setServiceConfig(
+          context.ContextOuterClass.ServiceConfig.Builder builderForValue) {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceConfigBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      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;
+          }
+          onChanged();
+        } else {
+          serviceConfigBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      public Builder clearServiceConfig() {
+        if (serviceConfigBuilder_ == null) {
+          serviceConfig_ = null;
+          onChanged();
+        } else {
+          serviceConfig_ = null;
+          serviceConfigBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</code>
+       */
+      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 {
+          return serviceConfig_ == null ?
+              context.ContextOuterClass.ServiceConfig.getDefaultInstance() : serviceConfig_;
+        }
+      }
+      /**
+       * <code>.context.ServiceConfig service_config = 6;</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(),
+                  getParentForChildren(),
+                  isClean());
+          serviceConfig_ = null;
+        }
+        return serviceConfigBuilder_;
+      }
+      @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.Service)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Service)
+    private static final context.ContextOuterClass.Service DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Service();
+    }
+
+    public static context.ContextOuterClass.Service getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Service>
+        PARSER = new com.google.protobuf.AbstractParser<Service>() {
+      @java.lang.Override
+      public Service parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Service(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Service> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Service> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Service getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceStatusOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceStatus)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
+     */
+    int getServiceStatusValue();
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
+     */
+    context.ContextOuterClass.ServiceStatusEnum getServiceStatus();
+  }
+  /**
+   * Protobuf type {@code context.ServiceStatus}
+   */
+  public static final class ServiceStatus extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceStatus)
+      ServiceStatusOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceStatus.newBuilder() to construct.
+    private ServiceStatus(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceStatus() {
+      serviceStatus_ = 0;
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceStatus();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceStatus(
+        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();
+
+              serviceStatus_ = 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 context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+    }
+
+    public static final int SERVICE_STATUS_FIELD_NUMBER = 1;
+    private int serviceStatus_;
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The enum numeric value on the wire for serviceStatus.
+     */
+    @java.lang.Override public int getServiceStatusValue() {
+      return serviceStatus_;
+    }
+    /**
+     * <code>.context.ServiceStatusEnum service_status = 1;</code>
+     * @return The serviceStatus.
+     */
+    @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;
+    @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 (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        output.writeEnum(1, serviceStatus_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (serviceStatus_ != context.ContextOuterClass.ServiceStatusEnum.SERVICESTATUS_UNDEFINED.getNumber()) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeEnumSize(1, serviceStatus_);
+      }
+      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.ServiceStatus)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceStatus other = (context.ContextOuterClass.ServiceStatus) obj;
+
+      if (serviceStatus_ != other.serviceStatus_) 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) + SERVICE_STATUS_FIELD_NUMBER;
+      hash = (53 * hash) + serviceStatus_;
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ServiceStatus parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceStatus parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceStatus parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceStatus parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ServiceStatus parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ServiceStatus parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceStatus 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.ServiceStatus 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.ServiceStatus}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_ServiceStatus_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceStatus.class, context.ContextOuterClass.ServiceStatus.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceStatus.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();
+        serviceStatus_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceStatus_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceStatus.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus build() {
+        context.ContextOuterClass.ServiceStatus result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceStatus buildPartial() {
+        context.ContextOuterClass.ServiceStatus result = new context.ContextOuterClass.ServiceStatus(this);
+        result.serviceStatus_ = serviceStatus_;
+        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.ServiceStatus) {
+          return mergeFrom((context.ContextOuterClass.ServiceStatus)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());
+        }
+        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.ServiceStatus parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceStatus) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int serviceStatus_ = 0;
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The enum numeric value on the wire for serviceStatus.
+       */
+      @java.lang.Override public int getServiceStatusValue() {
+        return serviceStatus_;
+      }
+      /**
+       * <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 Builder setServiceStatusValue(int value) {
+        
+        serviceStatus_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>.context.ServiceStatusEnum service_status = 1;</code>
+       * @return The serviceStatus.
+       */
+      @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.ServiceStatusEnum service_status = 1;</code>
+       * @param value The serviceStatus to set.
+       * @return This builder for chaining.
+       */
+      public Builder setServiceStatus(context.ContextOuterClass.ServiceStatusEnum value) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        
+        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(
+          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.ServiceStatus)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceStatus)
+    private static final context.ContextOuterClass.ServiceStatus DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceStatus();
+    }
+
+    public static context.ContextOuterClass.ServiceStatus getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceStatus>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceStatus>() {
+      @java.lang.Override
+      public ServiceStatus parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceStatus(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceStatus> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceStatus> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceStatus getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceConfigOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceConfig)
+      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.ServiceConfig}
+   */
+  public static final class ServiceConfig extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceConfig)
+      ServiceConfigOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceConfig.newBuilder() to construct.
+    private ServiceConfig(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceConfig() {
+      configRules_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceConfig();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceConfig(
+        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_ServiceConfig_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.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.ServiceConfig)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceConfig other = (context.ContextOuterClass.ServiceConfig) 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.ServiceConfig parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceConfig parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceConfig parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceConfig parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ServiceConfig parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ServiceConfig parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceConfig 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.ServiceConfig 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.ServiceConfig}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_ServiceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceConfig_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceConfig.class, context.ContextOuterClass.ServiceConfig.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceConfig.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_ServiceConfig_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceConfig.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceConfig build() {
+        context.ContextOuterClass.ServiceConfig result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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();
+        }
+        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.ServiceConfig) {
+          return mergeFrom((context.ContextOuterClass.ServiceConfig)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_);
+            }
+          }
+        }
+        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.ServiceConfig parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceConfig) 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.ServiceConfig)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceConfig)
+    private static final context.ContextOuterClass.ServiceConfig DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceConfig();
+    }
+
+    public static context.ContextOuterClass.ServiceConfig getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceConfig>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceConfig>() {
+      @java.lang.Override
+      public ServiceConfig parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceConfig(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceConfig> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceConfig> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceConfig getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ServiceId> 
+        getServiceIdsList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceId getServiceIds(int index);
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    int getServiceIdsCount();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceIdList}
+   */
+  public static final class ServiceIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceIdList)
+      ServiceIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceIdList.newBuilder() to construct.
+    private ServiceIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceIdList() {
+      serviceIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceIdList(
+        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)) {
+                serviceIds_ = new java.util.ArrayList<context.ContextOuterClass.ServiceId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              serviceIds_.add(
+                  input.readMessage(context.ContextOuterClass.ServiceId.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)) {
+          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;
+    }
+
+    @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);
+    }
+
+    public static final int SERVICE_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ServiceId> serviceIds_;
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ServiceId> getServiceIdsList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceIdOrBuilder> 
+        getServiceIdsOrBuilderList() {
+      return serviceIds_;
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getServiceIdsCount() {
+      return serviceIds_.size();
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getServiceIds(int index) {
+      return serviceIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ServiceId service_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdsOrBuilder(
+        int index) {
+      return serviceIds_.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 < serviceIds_.size(); i++) {
+        output.writeMessage(1, serviceIds_.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 < serviceIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, serviceIds_.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.ServiceIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceIdList other = (context.ContextOuterClass.ServiceIdList) obj;
+
+      if (!getServiceIdsList()
+          .equals(other.getServiceIdsList())) 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 (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.ServiceIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ServiceIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ServiceIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceIdList 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.ServiceIdList 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.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;
+      }
+
+      @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);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceIdList build() {
+        context.ContextOuterClass.ServiceIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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();
+        }
+        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.ServiceIdList) {
+          return mergeFrom((context.ContextOuterClass.ServiceIdList)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_);
+            }
+          }
+        }
+        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.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);
+          }
+        }
+        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();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public int getServiceIdsCount() {
+        if (serviceIdsBuilder_ == null) {
+          return serviceIds_.size();
+        } else {
+          return serviceIdsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</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 = 1;</code>
+       */
+      public Builder clearServiceIds() {
+        if (serviceIdsBuilder_ == null) {
+          serviceIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          serviceIdsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</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 = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</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 = 1;</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 = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder() {
+        return getServiceIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder addServiceIdsBuilder(
+          int index) {
+        return getServiceIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ServiceId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ServiceId service_ids = 1;</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_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          serviceIds_ = null;
+        }
+        return serviceIdsBuilder_;
+      }
+      @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.ServiceIdList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceIdList)
+    private static final context.ContextOuterClass.ServiceIdList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceIdList();
+    }
+
+    public static context.ContextOuterClass.ServiceIdList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceIdList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceIdList>() {
+      @java.lang.Override
+      public ServiceIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceIdList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceIdList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceIdList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceList)
+      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>
+     */
+    context.ContextOuterClass.Service getServices(int index);
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    int getServicesCount();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList();
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ServiceList}
+   */
+  public static final class ServiceList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceList)
+      ServiceListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceList.newBuilder() to construct.
+    private ServiceList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceList() {
+      services_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceList(
+        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)) {
+                services_ = new java.util.ArrayList<context.ContextOuterClass.Service>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              services_.add(
+                  input.readMessage(context.ContextOuterClass.Service.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)) {
+          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;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.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_;
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+        getServicesOrBuilderList() {
+      return services_;
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public int getServicesCount() {
+      return services_.size();
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.Service getServices(int index) {
+      return services_.get(index);
+    }
+    /**
+     * <code>repeated .context.Service services = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+        int index) {
+      return services_.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 < services_.size(); i++) {
+        output.writeMessage(1, services_.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 < services_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, services_.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.ServiceList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceList other = (context.ContextOuterClass.ServiceList) obj;
+
+      if (!getServicesList()
+          .equals(other.getServicesList())) 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 (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.ServiceList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ServiceList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ServiceList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceList 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.ServiceList 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.ServiceList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_ServiceList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceList.class, context.ContextOuterClass.ServiceList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceList build() {
+        context.ContextOuterClass.ServiceList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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();
+        }
+        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.ServiceList) {
+          return mergeFrom((context.ContextOuterClass.ServiceList)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);
+        }
+      }
+      /**
+       * <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);
+        }
+        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());
+        }
+        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);
+        }
+        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();
+          }
+          ensureServicesIsMutable();
+          services_.add(index, value);
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder addServices(
+          context.ContextOuterClass.Service.Builder builderForValue) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.add(builderForValue.build());
+          onChanged();
+        } else {
+          servicesBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      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());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      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);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder clearServices() {
+        if (servicesBuilder_ == null) {
+          services_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          servicesBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public Builder removeServices(int index) {
+        if (servicesBuilder_ == null) {
+          ensureServicesIsMutable();
+          services_.remove(index);
+          onChanged();
+        } else {
+          servicesBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder getServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.ServiceOrBuilder getServicesOrBuilder(
+          int index) {
+        if (servicesBuilder_ == null) {
+          return services_.get(index);  } else {
+          return servicesBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ServiceOrBuilder> 
+           getServicesOrBuilderList() {
+        if (servicesBuilder_ != null) {
+          return servicesBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(services_);
+        }
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder addServicesBuilder() {
+        return getServicesFieldBuilder().addBuilder(
+            context.ContextOuterClass.Service.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public context.ContextOuterClass.Service.Builder addServicesBuilder(
+          int index) {
+        return getServicesFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.Service.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.Service services = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Service.Builder> 
+           getServicesBuilderList() {
+        return getServicesFieldBuilder().getBuilderList();
+      }
+      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_;
+      }
+      @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.ServiceList)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceList)
+    private static final context.ContextOuterClass.ServiceList DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceList();
+    }
+
+    public static context.ContextOuterClass.ServiceList getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceList>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceList>() {
+      @java.lang.Override
+      public ServiceList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceList(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceList> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceList> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceList getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ServiceEventOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ServiceEvent)
+      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.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();
+  }
+  /**
+   * Protobuf type {@code context.ServiceEvent}
+   */
+  public static final class ServiceEvent extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ServiceEvent)
+      ServiceEventOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ServiceEvent.newBuilder() to construct.
+    private ServiceEvent(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ServiceEvent() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ServiceEvent();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ServiceEvent(
+        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.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: {
+              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_ServiceEvent_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.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 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();
+    }
+
+    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 (serviceId_ != null) {
+        output.writeMessage(2, getServiceId());
+      }
+      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 (serviceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getServiceId());
+      }
+      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.ServiceEvent)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ServiceEvent other = (context.ContextOuterClass.ServiceEvent) obj;
+
+      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;
+    }
+
+    @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 (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.ServiceEvent parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceEvent parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceEvent parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.ServiceEvent parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.ServiceEvent parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.ServiceEvent parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ServiceEvent 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.ServiceEvent 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.ServiceEvent}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_ServiceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ServiceEvent.class, context.ContextOuterClass.ServiceEvent.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ServiceEvent.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 (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ServiceEvent_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+        return context.ContextOuterClass.ServiceEvent.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceEvent build() {
+        context.ContextOuterClass.ServiceEvent result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ServiceEvent buildPartial() {
+        context.ContextOuterClass.ServiceEvent result = new context.ContextOuterClass.ServiceEvent(this);
+        if (eventBuilder_ == null) {
+          result.event_ = event_;
+        } else {
+          result.event_ = eventBuilder_.build();
+        }
+        if (serviceIdBuilder_ == null) {
+          result.serviceId_ = serviceId_;
+        } else {
+          result.serviceId_ = serviceIdBuilder_.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.ServiceEvent) {
+          return mergeFrom((context.ContextOuterClass.ServiceEvent)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());
+        }
+        if (other.hasServiceId()) {
+          mergeServiceId(other.getServiceId());
+        }
+        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.ServiceEvent parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ServiceEvent) 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.ServiceId serviceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> serviceIdBuilder_;
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return Whether the serviceId field is set.
+       */
+      public boolean hasServiceId() {
+        return serviceIdBuilder_ != null || serviceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       * @return The serviceId.
+       */
+      public context.ContextOuterClass.ServiceId getServiceId() {
+        if (serviceIdBuilder_ == null) {
+          return serviceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        } else {
+          return serviceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          serviceId_ = value;
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder setServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          serviceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder mergeServiceId(context.ContextOuterClass.ServiceId value) {
+        if (serviceIdBuilder_ == null) {
+          if (serviceId_ != null) {
+            serviceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(serviceId_).mergeFrom(value).buildPartial();
+          } else {
+            serviceId_ = value;
+          }
+          onChanged();
+        } else {
+          serviceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public Builder clearServiceId() {
+        if (serviceIdBuilder_ == null) {
+          serviceId_ = null;
+          onChanged();
+        } else {
+          serviceId_ = null;
+          serviceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getServiceIdBuilder() {
+        
+        onChanged();
+        return getServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getServiceIdOrBuilder() {
+        if (serviceIdBuilder_ != null) {
+          return serviceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return serviceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : serviceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getServiceIdFieldBuilder() {
+        if (serviceIdBuilder_ == null) {
+          serviceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          serviceId_ = null;
+        }
+        return serviceIdBuilder_;
+      }
+      @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.ServiceEvent)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ServiceEvent)
+    private static final context.ContextOuterClass.ServiceEvent DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ServiceEvent();
+    }
+
+    public static context.ContextOuterClass.ServiceEvent getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ServiceEvent>
+        PARSER = new com.google.protobuf.AbstractParser<ServiceEvent>() {
+      @java.lang.Override
+      public ServiceEvent parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ServiceEvent(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ServiceEvent> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ServiceEvent> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceEvent getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EndPointIdOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPointId)
+      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>
+     */
+    context.ContextOuterClass.UuidOrBuilder getEndpointUuidOrBuilder();
+  }
+  /**
+   * <pre>
+   * ----- Endpoint ------------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.EndPointId}
+   */
+  public static final class EndPointId extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.EndPointId)
+      EndPointIdOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EndPointId.newBuilder() to construct.
+    private EndPointId(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EndPointId() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EndPointId();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EndPointId(
+        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.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();
+              }
+
+              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_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();
+    }
+
+    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;
+    @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());
+      }
+      if (deviceId_ != null) {
+        output.writeMessage(2, getDeviceId());
+      }
+      if (endpointUuid_ != null) {
+        output.writeMessage(3, getEndpointUuid());
+      }
+      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());
+      }
+      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;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.EndPointId)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.EndPointId other = (context.ContextOuterClass.EndPointId) obj;
+
+      if (hasTopologyId() != other.hasTopologyId()) return false;
+      if (hasTopologyId()) {
+        if (!getTopologyId()
+            .equals(other.getTopologyId())) return false;
+      }
+      if (hasDeviceId() != other.hasDeviceId()) return false;
+      if (hasDeviceId()) {
+        if (!getDeviceId()
+            .equals(other.getDeviceId())) return false;
+      }
+      if (hasEndpointUuid() != other.hasEndpointUuid()) return false;
+      if (hasEndpointUuid()) {
+        if (!getEndpointUuid()
+            .equals(other.getEndpointUuid())) 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 (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.EndPointId parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.EndPointId parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.EndPointId parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.EndPointId parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.EndPointId parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.EndPointId parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPointId 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.EndPointId 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>
+     * ----- 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.EndPointId)
+        context.ContextOuterClass.EndPointIdOrBuilder {
+      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);
+      }
+
+      // 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();
+      }
+      /**
+       * <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 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;
+      }
+      /**
+       * <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();
+        }
+      }
+      /**
+       * <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());
+        }
+
+        return this;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <code>.context.DeviceId device_id = 2;</code>
+       */
+      public Builder clearDeviceId() {
+        if (deviceIdBuilder_ == null) {
+          deviceId_ = null;
+          onChanged();
+        } else {
+          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_;
+      }
+
+      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;
+      }
+      /**
+       * <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();
+        }
+      }
+      /**
+       * <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);
+        }
+
+        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;
+      }
+      /**
+       * <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;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public Builder clearEndpointUuid() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuid_ = null;
+          onChanged();
+        } else {
+          endpointUuid_ = null;
+          endpointUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getEndpointUuidBuilder() {
+        
+        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_;
+        }
+      }
+      /**
+       * <code>.context.Uuid endpoint_uuid = 3;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getEndpointUuidFieldBuilder() {
+        if (endpointUuidBuilder_ == null) {
+          endpointUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getEndpointUuid(),
+                  getParentForChildren(),
+                  isClean());
+          endpointUuid_ = null;
+        }
+        return endpointUuidBuilder_;
+      }
+      @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.EndPointId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.EndPointId)
+    private static final context.ContextOuterClass.EndPointId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPointId();
+    }
+
+    public static context.ContextOuterClass.EndPointId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<EndPointId>
+        PARSER = new com.google.protobuf.AbstractParser<EndPointId>() {
+      @java.lang.Override
+      public EndPointId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EndPointId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<EndPointId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EndPointId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface EndPointOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.EndPoint)
+      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.
+     */
+    com.google.protobuf.ByteString
+        getEndpointTypeBytes();
+  }
+  /**
+   * Protobuf type {@code context.EndPoint}
+   */
+  public static final class EndPoint extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.EndPoint)
+      EndPointOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use EndPoint.newBuilder() to construct.
+    private EndPoint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private EndPoint() {
+      endpointType_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new EndPoint();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private EndPoint(
+        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.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;
+            }
+            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_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;
+      }
+    }
+
+    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 (endpointId_ != null) {
+        output.writeMessage(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, endpointType_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (endpointId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getEndpointId());
+      }
+      if (!getEndpointTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, endpointType_);
+      }
+      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.EndPoint)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.EndPoint other = (context.ContextOuterClass.EndPoint) obj;
+
+      if (hasEndpointId() != other.hasEndpointId()) return false;
+      if (hasEndpointId()) {
+        if (!getEndpointId()
+            .equals(other.getEndpointId())) return false;
+      }
+      if (!getEndpointType()
+          .equals(other.getEndpointType())) 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 (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();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.EndPoint parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.EndPoint parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.EndPoint parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    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.EndPoint parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    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.EndPoint parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    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.EndPoint parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.EndPoint 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.EndPoint 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.EndPoint}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@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_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);
+      }
+
+      // Construct using context.ContextOuterClass.EndPoint.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 (endpointIdBuilder_ == null) {
+          endpointId_ = null;
+        } else {
+          endpointId_ = null;
+          endpointIdBuilder_ = null;
+        }
+        endpointType_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_EndPoint_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+        return context.ContextOuterClass.EndPoint.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPoint build() {
+        context.ContextOuterClass.EndPoint result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.EndPoint buildPartial() {
+        context.ContextOuterClass.EndPoint result = new context.ContextOuterClass.EndPoint(this);
+        if (endpointIdBuilder_ == null) {
+          result.endpointId_ = endpointId_;
+        } else {
+          result.endpointId_ = endpointIdBuilder_.build();
+        }
+        result.endpointType_ = endpointType_;
+        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.EndPoint) {
+          return mergeFrom((context.ContextOuterClass.EndPoint)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.EndPoint other) {
+        if (other == context.ContextOuterClass.EndPoint.getDefaultInstance()) return this;
+        if (other.hasEndpointId()) {
+          mergeEndpointId(other.getEndpointId());
+        }
+        if (!other.getEndpointType().isEmpty()) {
+          endpointType_ = other.endpointType_;
+          onChanged();
+        }
+        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 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;
+        }
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The endpointType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearEndpointType() {
+        
+        endpointType_ = getDefaultInstance().getEndpointType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string endpoint_type = 2;</code>
+       * @param value The bytes for endpointType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setEndpointTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        endpointType_ = value;
+        onChanged();
+        return this;
+      }
+      @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.EndPoint)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.EndPoint)
+    private static final context.ContextOuterClass.EndPoint DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.EndPoint();
+    }
+
+    public static context.ContextOuterClass.EndPoint getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<EndPoint>
+        PARSER = new com.google.protobuf.AbstractParser<EndPoint>() {
+      @java.lang.Override
+      public EndPoint parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new EndPoint(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<EndPoint> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<EndPoint> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.EndPoint getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConfigRuleOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConfigRule)
+      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.
+     */
+    java.lang.String getResourceValue();
+    /**
+     * <code>string resource_value = 3;</code>
+     * @return The bytes for resourceValue.
+     */
+    com.google.protobuf.ByteString
+        getResourceValueBytes();
+  }
+  /**
+   * Protobuf type {@code context.ConfigRule}
+   */
+  public static final class ConfigRule extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConfigRule)
+      ConfigRuleOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConfigRule.newBuilder() to construct.
+    private ConfigRule(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConfigRule() {
+      action_ = 0;
+      resourceKey_ = "";
+      resourceValue_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConfigRule();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConfigRule(
+        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();
+
+              action_ = rawValue;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceKey_ = s;
+              break;
+            }
+            case 26: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              resourceValue_ = 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 context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+    }
+
+    public static final int ACTION_FIELD_NUMBER = 1;
+    private int action_;
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The enum numeric value on the wire for action.
+     */
+    @java.lang.Override public int getActionValue() {
+      return action_;
+    }
+    /**
+     * <code>.context.ConfigActionEnum action = 1;</code>
+     * @return The action.
+     */
+    @java.lang.Override public context.ContextOuterClass.ConfigActionEnum getAction() {
+      @SuppressWarnings("deprecation")
+      context.ContextOuterClass.ConfigActionEnum result = context.ContextOuterClass.ConfigActionEnum.valueOf(action_);
+      return result == null ? context.ContextOuterClass.ConfigActionEnum.UNRECOGNIZED : result;
+    }
+
+    public static final int 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;
+      }
+    }
+
+    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 (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_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (action_ != context.ContextOuterClass.ConfigActionEnum.CONFIGACTION_UNDEFINED.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_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConfigRule)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConfigRule other = (context.ContextOuterClass.ConfigRule) obj;
+
+      if (action_ != other.action_) return false;
+      if (!getResourceKey()
+          .equals(other.getResourceKey())) return false;
+      if (!getResourceValue()
+          .equals(other.getResourceValue())) 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) + 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 = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConfigRule parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConfigRule parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConfigRule 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.ConfigRule 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.ConfigRule}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConfigRule)
+        context.ContextOuterClass.ConfigRuleOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConfigRule_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConfigRule.class, context.ContextOuterClass.ConfigRule.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConfigRule.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();
+        action_ = 0;
+
+        resourceKey_ = "";
+
+        resourceValue_ = "";
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConfigRule_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConfigRule.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule build() {
+        context.ContextOuterClass.ConfigRule result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConfigRule buildPartial() {
+        context.ContextOuterClass.ConfigRule result = new context.ContextOuterClass.ConfigRule(this);
+        result.action_ = action_;
+        result.resourceKey_ = resourceKey_;
+        result.resourceValue_ = resourceValue_;
+        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.ConfigRule) {
+          return mergeFrom((context.ContextOuterClass.ConfigRule)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConfigRule other) {
+        if (other == context.ContextOuterClass.ConfigRule.getDefaultInstance()) return this;
+        if (other.action_ != 0) {
+          setActionValue(other.getActionValue());
+        }
+        if (!other.getResourceKey().isEmpty()) {
+          resourceKey_ = other.resourceKey_;
+          onChanged();
+        }
+        if (!other.getResourceValue().isEmpty()) {
+          resourceValue_ = other.resourceValue_;
+          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 {
+        context.ContextOuterClass.ConfigRule parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConfigRule) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return this;
+      }
+
+      private int 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 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();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string resource_value = 3;</code>
+       * @param value The bytes for resourceValue to set.
+       * @return This builder for chaining.
+       */
+      public Builder setResourceValueBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        resourceValue_ = 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.ConfigRule)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConfigRule)
+    private static final context.ContextOuterClass.ConfigRule DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConfigRule();
+    }
+
+    public static context.ContextOuterClass.ConfigRule getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConfigRule>
+        PARSER = new com.google.protobuf.AbstractParser<ConfigRule>() {
+      @java.lang.Override
+      public ConfigRule parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConfigRule(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConfigRule> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConfigRule> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConfigRule getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConstraintOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Constraint)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
+     */
+    java.lang.String getConstraintType();
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
+     */
+    com.google.protobuf.ByteString
+        getConstraintTypeBytes();
+
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
+     */
+    java.lang.String getConstraintValue();
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
+     */
+    com.google.protobuf.ByteString
+        getConstraintValueBytes();
+  }
+  /**
+   * <pre>
+   * ----- Constraint ----------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.Constraint}
+   */
+  public static final class Constraint extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Constraint)
+      ConstraintOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Constraint.newBuilder() to construct.
+    private Constraint(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Constraint() {
+      constraintType_ = "";
+      constraintValue_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Constraint();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Constraint(
+        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: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintType_ = s;
+              break;
+            }
+            case 18: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              constraintValue_ = 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 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);
+    }
+
+    public static final int CONSTRAINT_TYPE_FIELD_NUMBER = 1;
+    private volatile java.lang.Object constraintType_;
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The constraintType.
+     */
+    @java.lang.Override
+    public java.lang.String getConstraintType() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintType_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string constraint_type = 1;</code>
+     * @return The bytes for constraintType.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getConstraintTypeBytes() {
+      java.lang.Object ref = constraintType_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        constraintType_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int CONSTRAINT_VALUE_FIELD_NUMBER = 2;
+    private volatile java.lang.Object constraintValue_;
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The constraintValue.
+     */
+    @java.lang.Override
+    public java.lang.String getConstraintValue() {
+      java.lang.Object ref = constraintValue_;
+      if (ref instanceof java.lang.String) {
+        return (java.lang.String) ref;
+      } else {
+        com.google.protobuf.ByteString bs = 
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        constraintValue_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string constraint_value = 2;</code>
+     * @return The bytes for constraintValue.
+     */
+    @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;
+      }
+    }
+
+    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 (!getConstraintTypeBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, constraintValue_);
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (!getConstraintTypeBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, constraintType_);
+      }
+      if (!getConstraintValueBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, constraintValue_);
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.Constraint)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Constraint other = (context.ContextOuterClass.Constraint) obj;
+
+      if (!getConstraintType()
+          .equals(other.getConstraintType())) return false;
+      if (!getConstraintValue()
+          .equals(other.getConstraintValue())) 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) + 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.Constraint parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint 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 parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint 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 parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Constraint parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint 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 parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint 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 parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Constraint 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 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>
+     * ----- Constraint ----------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.Constraint}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Constraint)
+        context.ContextOuterClass.ConstraintOrBuilder {
+      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);
+      }
+
+      // Construct using context.ContextOuterClass.Constraint.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();
+        constraintType_ = "";
+
+        constraintValue_ = "";
+
+        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);
+        result.constraintType_ = constraintType_;
+        result.constraintValue_ = constraintValue_;
+        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;
+        if (!other.getConstraintType().isEmpty()) {
+          constraintType_ = other.constraintType_;
+          onChanged();
+        }
+        if (!other.getConstraintValue().isEmpty()) {
+          constraintValue_ = other.constraintValue_;
+          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 {
+        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 java.lang.Object constraintType_ = "";
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @return The constraintType.
+       */
+      public java.lang.String getConstraintType() {
+        java.lang.Object ref = constraintType_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintType_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @return The bytes for constraintType.
+       */
+      public com.google.protobuf.ByteString
+          getConstraintTypeBytes() {
+        java.lang.Object ref = constraintType_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintType_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @param value The constraintType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintType(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        constraintType_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearConstraintType() {
+        
+        constraintType_ = getDefaultInstance().getConstraintType();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_type = 1;</code>
+       * @param value The bytes for constraintType to set.
+       * @return This builder for chaining.
+       */
+      public Builder setConstraintTypeBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        constraintType_ = value;
+        onChanged();
+        return this;
+      }
+
+      private java.lang.Object constraintValue_ = "";
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @return The constraintValue.
+       */
+      public java.lang.String getConstraintValue() {
+        java.lang.Object ref = constraintValue_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          constraintValue_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @return The bytes for constraintValue.
+       */
+      public com.google.protobuf.ByteString
+          getConstraintValueBytes() {
+        java.lang.Object ref = constraintValue_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          constraintValue_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <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>string constraint_value = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearConstraintValue() {
+        
+        constraintValue_ = getDefaultInstance().getConstraintValue();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string constraint_value = 2;</code>
+       * @param value The bytes for constraintValue to set.
+       * @return This builder for chaining.
+       */
+      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)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Constraint)
+    private static final context.ContextOuterClass.Constraint DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Constraint();
+    }
+
+    public static context.ContextOuterClass.Constraint getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Constraint>
+        PARSER = new com.google.protobuf.AbstractParser<Constraint>() {
+      @java.lang.Override
+      public Constraint parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Constraint(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Constraint> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Constraint> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Constraint 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);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionId.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 (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionId_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionId.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionId build() {
+        context.ContextOuterClass.ConnectionId result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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();
+        }
+        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.ConnectionId) {
+          return mergeFrom((context.ContextOuterClass.ConnectionId)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());
+        }
+        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.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 this;
+      }
+
+      private context.ContextOuterClass.Uuid connectionUuid_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> connectionUuidBuilder_;
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return Whether the connectionUuid field is set.
+       */
+      public boolean hasConnectionUuid() {
+        return connectionUuidBuilder_ != null || connectionUuid_ != null;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       * @return The connectionUuid.
+       */
+      public context.ContextOuterClass.Uuid getConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          return connectionUuid_ == null ? context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        } else {
+          return connectionUuidBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder setConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          connectionUuid_ = value;
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder setConnectionUuid(
+          context.ContextOuterClass.Uuid.Builder builderForValue) {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = builderForValue.build();
+          onChanged();
+        } else {
+          connectionUuidBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder mergeConnectionUuid(context.ContextOuterClass.Uuid value) {
+        if (connectionUuidBuilder_ == null) {
+          if (connectionUuid_ != null) {
+            connectionUuid_ =
+              context.ContextOuterClass.Uuid.newBuilder(connectionUuid_).mergeFrom(value).buildPartial();
+          } else {
+            connectionUuid_ = value;
+          }
+          onChanged();
+        } else {
+          connectionUuidBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public Builder clearConnectionUuid() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuid_ = null;
+          onChanged();
+        } else {
+          connectionUuid_ = null;
+          connectionUuidBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.Uuid.Builder getConnectionUuidBuilder() {
+        
+        onChanged();
+        return getConnectionUuidFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      public context.ContextOuterClass.UuidOrBuilder getConnectionUuidOrBuilder() {
+        if (connectionUuidBuilder_ != null) {
+          return connectionUuidBuilder_.getMessageOrBuilder();
+        } else {
+          return connectionUuid_ == null ?
+              context.ContextOuterClass.Uuid.getDefaultInstance() : connectionUuid_;
+        }
+      }
+      /**
+       * <code>.context.Uuid connection_uuid = 1;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder> 
+          getConnectionUuidFieldBuilder() {
+        if (connectionUuidBuilder_ == null) {
+          connectionUuidBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.Uuid, context.ContextOuterClass.Uuid.Builder, context.ContextOuterClass.UuidOrBuilder>(
+                  getConnectionUuid(),
+                  getParentForChildren(),
+                  isClean());
+          connectionUuid_ = null;
+        }
+        return connectionUuidBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.ConnectionId)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.ConnectionId)
+    private static final context.ContextOuterClass.ConnectionId DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.ConnectionId();
+    }
+
+    public static context.ContextOuterClass.ConnectionId getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<ConnectionId>
+        PARSER = new com.google.protobuf.AbstractParser<ConnectionId>() {
+      @java.lang.Override
+      public ConnectionId parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionId(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<ConnectionId> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<ConnectionId> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.Connection)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return Whether the connectionId field is set.
+     */
+    boolean hasConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     * @return The connectionId.
+     */
+    context.ContextOuterClass.ConnectionId getConnectionId();
+    /**
+     * <code>.context.ConnectionId connection_id = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdOrBuilder();
+
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return Whether the relatedServiceId field is set.
+     */
+    boolean hasRelatedServiceId();
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return The relatedServiceId.
+     */
+    context.ContextOuterClass.ServiceId getRelatedServiceId();
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     */
+    context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder();
+
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    java.util.List<context.ContextOuterClass.EndPointId> 
+        getPathList();
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    context.ContextOuterClass.EndPointId getPath(int index);
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    int getPathCount();
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathOrBuilderList();
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.Connection}
+   */
+  public static final class Connection extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.Connection)
+      ConnectionOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use Connection.newBuilder() to construct.
+    private Connection(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private Connection() {
+      path_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new Connection();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private Connection(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              context.ContextOuterClass.ConnectionId.Builder subBuilder = null;
+              if (connectionId_ != null) {
+                subBuilder = connectionId_.toBuilder();
+              }
+              connectionId_ = input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(connectionId_);
+                connectionId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 18: {
+              context.ContextOuterClass.ServiceId.Builder subBuilder = null;
+              if (relatedServiceId_ != null) {
+                subBuilder = relatedServiceId_.toBuilder();
+              }
+              relatedServiceId_ = input.readMessage(context.ContextOuterClass.ServiceId.parser(), extensionRegistry);
+              if (subBuilder != null) {
+                subBuilder.mergeFrom(relatedServiceId_);
+                relatedServiceId_ = subBuilder.buildPartial();
+              }
+
+              break;
+            }
+            case 26: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                path_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              path_.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)) {
+          path_ = java.util.Collections.unmodifiableList(path_);
+        }
+        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 RELATED_SERVICE_ID_FIELD_NUMBER = 2;
+    private context.ContextOuterClass.ServiceId relatedServiceId_;
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return Whether the relatedServiceId field is set.
+     */
+    @java.lang.Override
+    public boolean hasRelatedServiceId() {
+      return relatedServiceId_ != null;
+    }
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     * @return The relatedServiceId.
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceId getRelatedServiceId() {
+      return relatedServiceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+    }
+    /**
+     * <code>.context.ServiceId related_service_id = 2;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder() {
+      return getRelatedServiceId();
+    }
+
+    public static final int PATH_FIELD_NUMBER = 3;
+    private java.util.List<context.ContextOuterClass.EndPointId> path_;
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.EndPointId> getPathList() {
+      return path_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+        getPathOrBuilderList() {
+      return path_;
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public int getPathCount() {
+      return path_.size();
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointId getPath(int index) {
+      return path_.get(index);
+    }
+    /**
+     * <code>repeated .context.EndPointId path = 3;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
+        int index) {
+      return path_.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 (connectionId_ != null) {
+        output.writeMessage(1, getConnectionId());
+      }
+      if (relatedServiceId_ != null) {
+        output.writeMessage(2, getRelatedServiceId());
+      }
+      for (int i = 0; i < path_.size(); i++) {
+        output.writeMessage(3, path_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      if (connectionId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, getConnectionId());
+      }
+      if (relatedServiceId_ != null) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(2, getRelatedServiceId());
+      }
+      for (int i = 0; i < path_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(3, path_.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.Connection)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.Connection other = (context.ContextOuterClass.Connection) obj;
+
+      if (hasConnectionId() != other.hasConnectionId()) return false;
+      if (hasConnectionId()) {
+        if (!getConnectionId()
+            .equals(other.getConnectionId())) return false;
+      }
+      if (hasRelatedServiceId() != other.hasRelatedServiceId()) return false;
+      if (hasRelatedServiceId()) {
+        if (!getRelatedServiceId()
+            .equals(other.getRelatedServiceId())) return false;
+      }
+      if (!getPathList()
+          .equals(other.getPathList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (hasConnectionId()) {
+        hash = (37 * hash) + CONNECTION_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionId().hashCode();
+      }
+      if (hasRelatedServiceId()) {
+        hash = (37 * hash) + RELATED_SERVICE_ID_FIELD_NUMBER;
+        hash = (53 * hash) + getRelatedServiceId().hashCode();
+      }
+      if (getPathCount() > 0) {
+        hash = (37 * hash) + PATH_FIELD_NUMBER;
+        hash = (53 * hash) + getPathList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.Connection parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.Connection prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.Connection}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.Connection)
+        context.ContextOuterClass.ConnectionOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_Connection_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_Connection_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.Connection.class, context.ContextOuterClass.Connection.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.Connection.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getPathFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdBuilder_ == null) {
+          connectionId_ = null;
+        } else {
+          connectionId_ = null;
+          connectionIdBuilder_ = null;
+        }
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceId_ = null;
+        } else {
+          relatedServiceId_ = null;
+          relatedServiceIdBuilder_ = null;
+        }
+        if (pathBuilder_ == null) {
+          path_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          pathBuilder_.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 (relatedServiceIdBuilder_ == null) {
+          result.relatedServiceId_ = relatedServiceId_;
+        } else {
+          result.relatedServiceId_ = relatedServiceIdBuilder_.build();
+        }
+        if (pathBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            path_ = java.util.Collections.unmodifiableList(path_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.path_ = path_;
+        } else {
+          result.path_ = pathBuilder_.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.hasRelatedServiceId()) {
+          mergeRelatedServiceId(other.getRelatedServiceId());
+        }
+        if (pathBuilder_ == null) {
+          if (!other.path_.isEmpty()) {
+            if (path_.isEmpty()) {
+              path_ = other.path_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensurePathIsMutable();
+              path_.addAll(other.path_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.path_.isEmpty()) {
+            if (pathBuilder_.isEmpty()) {
+              pathBuilder_.dispose();
+              pathBuilder_ = null;
+              path_ = other.path_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              pathBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getPathFieldBuilder() : null;
+            } else {
+              pathBuilder_.addAllMessages(other.path_);
+            }
+          }
+        }
+        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 relatedServiceId_;
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> relatedServiceIdBuilder_;
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       * @return Whether the relatedServiceId field is set.
+       */
+      public boolean hasRelatedServiceId() {
+        return relatedServiceIdBuilder_ != null || relatedServiceId_ != null;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       * @return The relatedServiceId.
+       */
+      public context.ContextOuterClass.ServiceId getRelatedServiceId() {
+        if (relatedServiceIdBuilder_ == null) {
+          return relatedServiceId_ == null ? context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+        } else {
+          return relatedServiceIdBuilder_.getMessage();
+        }
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder setRelatedServiceId(context.ContextOuterClass.ServiceId value) {
+        if (relatedServiceIdBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          relatedServiceId_ = value;
+          onChanged();
+        } else {
+          relatedServiceIdBuilder_.setMessage(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder setRelatedServiceId(
+          context.ContextOuterClass.ServiceId.Builder builderForValue) {
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceId_ = builderForValue.build();
+          onChanged();
+        } else {
+          relatedServiceIdBuilder_.setMessage(builderForValue.build());
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder mergeRelatedServiceId(context.ContextOuterClass.ServiceId value) {
+        if (relatedServiceIdBuilder_ == null) {
+          if (relatedServiceId_ != null) {
+            relatedServiceId_ =
+              context.ContextOuterClass.ServiceId.newBuilder(relatedServiceId_).mergeFrom(value).buildPartial();
+          } else {
+            relatedServiceId_ = value;
+          }
+          onChanged();
+        } else {
+          relatedServiceIdBuilder_.mergeFrom(value);
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public Builder clearRelatedServiceId() {
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceId_ = null;
+          onChanged();
+        } else {
+          relatedServiceId_ = null;
+          relatedServiceIdBuilder_ = null;
+        }
+
+        return this;
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceId.Builder getRelatedServiceIdBuilder() {
+        
+        onChanged();
+        return getRelatedServiceIdFieldBuilder().getBuilder();
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      public context.ContextOuterClass.ServiceIdOrBuilder getRelatedServiceIdOrBuilder() {
+        if (relatedServiceIdBuilder_ != null) {
+          return relatedServiceIdBuilder_.getMessageOrBuilder();
+        } else {
+          return relatedServiceId_ == null ?
+              context.ContextOuterClass.ServiceId.getDefaultInstance() : relatedServiceId_;
+        }
+      }
+      /**
+       * <code>.context.ServiceId related_service_id = 2;</code>
+       */
+      private com.google.protobuf.SingleFieldBuilderV3<
+          context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder> 
+          getRelatedServiceIdFieldBuilder() {
+        if (relatedServiceIdBuilder_ == null) {
+          relatedServiceIdBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+              context.ContextOuterClass.ServiceId, context.ContextOuterClass.ServiceId.Builder, context.ContextOuterClass.ServiceIdOrBuilder>(
+                  getRelatedServiceId(),
+                  getParentForChildren(),
+                  isClean());
+          relatedServiceId_ = null;
+        }
+        return relatedServiceIdBuilder_;
+      }
+
+      private java.util.List<context.ContextOuterClass.EndPointId> path_ =
+        java.util.Collections.emptyList();
+      private void ensurePathIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          path_ = new java.util.ArrayList<context.ContextOuterClass.EndPointId>(path_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> pathBuilder_;
+
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId> getPathList() {
+        if (pathBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(path_);
+        } else {
+          return pathBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public int getPathCount() {
+        if (pathBuilder_ == null) {
+          return path_.size();
+        } else {
+          return pathBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId getPath(int index) {
+        if (pathBuilder_ == null) {
+          return path_.get(index);
+        } else {
+          return pathBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder setPath(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathIsMutable();
+          path_.set(index, value);
+          onChanged();
+        } else {
+          pathBuilder_.setMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder setPath(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(context.ContextOuterClass.EndPointId value) {
+        if (pathBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathIsMutable();
+          path_.add(value);
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(
+          int index, context.ContextOuterClass.EndPointId value) {
+        if (pathBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensurePathIsMutable();
+          path_.add(index, value);
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(
+          context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.add(builderForValue.build());
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addPath(
+          int index, context.ContextOuterClass.EndPointId.Builder builderForValue) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          pathBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder addAllPath(
+          java.lang.Iterable<? extends context.ContextOuterClass.EndPointId> values) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, path_);
+          onChanged();
+        } else {
+          pathBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder clearPath() {
+        if (pathBuilder_ == null) {
+          path_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          pathBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public Builder removePath(int index) {
+        if (pathBuilder_ == null) {
+          ensurePathIsMutable();
+          path_.remove(index);
+          onChanged();
+        } else {
+          pathBuilder_.remove(index);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder getPathBuilder(
+          int index) {
+        return getPathFieldBuilder().getBuilder(index);
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointIdOrBuilder getPathOrBuilder(
+          int index) {
+        if (pathBuilder_ == null) {
+          return path_.get(index);  } else {
+          return pathBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.EndPointIdOrBuilder> 
+           getPathOrBuilderList() {
+        if (pathBuilder_ != null) {
+          return pathBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(path_);
+        }
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathBuilder() {
+        return getPathFieldBuilder().addBuilder(
+            context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public context.ContextOuterClass.EndPointId.Builder addPathBuilder(
+          int index) {
+        return getPathFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.EndPointId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.EndPointId path = 3;</code>
+       */
+      public java.util.List<context.ContextOuterClass.EndPointId.Builder> 
+           getPathBuilderList() {
+        return getPathFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder> 
+          getPathFieldBuilder() {
+        if (pathBuilder_ == null) {
+          pathBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.EndPointId, context.ContextOuterClass.EndPointId.Builder, context.ContextOuterClass.EndPointIdOrBuilder>(
+                  path_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          path_ = null;
+        }
+        return pathBuilder_;
+      }
+      @java.lang.Override
+      public final Builder setUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.setUnknownFields(unknownFields);
+      }
+
+      @java.lang.Override
+      public final Builder mergeUnknownFields(
+          final com.google.protobuf.UnknownFieldSet unknownFields) {
+        return super.mergeUnknownFields(unknownFields);
+      }
+
+
+      // @@protoc_insertion_point(builder_scope:context.Connection)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.Connection)
+    private static final context.ContextOuterClass.Connection DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.Connection();
+    }
+
+    public static context.ContextOuterClass.Connection getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<Connection>
+        PARSER = new com.google.protobuf.AbstractParser<Connection>() {
+      @java.lang.Override
+      public Connection parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new Connection(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<Connection> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<Connection> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.Connection getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface ConnectionIdListOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.ConnectionIdList)
+      com.google.protobuf.MessageOrBuilder {
+
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<context.ContextOuterClass.ConnectionId> 
+        getConnectionIdsList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionId getConnectionIds(int index);
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    int getConnectionIdsCount();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList();
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index);
+  }
+  /**
+   * Protobuf type {@code context.ConnectionIdList}
+   */
+  public static final class ConnectionIdList extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.ConnectionIdList)
+      ConnectionIdListOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use ConnectionIdList.newBuilder() to construct.
+    private ConnectionIdList(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private ConnectionIdList() {
+      connectionIds_ = java.util.Collections.emptyList();
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new ConnectionIdList();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private ConnectionIdList(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      this();
+      if (extensionRegistry == null) {
+        throw new java.lang.NullPointerException();
+      }
+      int mutable_bitField0_ = 0;
+      com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+          com.google.protobuf.UnknownFieldSet.newBuilder();
+      try {
+        boolean done = false;
+        while (!done) {
+          int tag = input.readTag();
+          switch (tag) {
+            case 0:
+              done = true;
+              break;
+            case 10: {
+              if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+                connectionIds_ = new java.util.ArrayList<context.ContextOuterClass.ConnectionId>();
+                mutable_bitField0_ |= 0x00000001;
+              }
+              connectionIds_.add(
+                  input.readMessage(context.ContextOuterClass.ConnectionId.parser(), extensionRegistry));
+              break;
+            }
+            default: {
+              if (!parseUnknownField(
+                  input, unknownFields, extensionRegistry, tag)) {
+                done = true;
+              }
+              break;
+            }
+          }
+        }
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        throw e.setUnfinishedMessage(this);
+      } catch (java.io.IOException e) {
+        throw new com.google.protobuf.InvalidProtocolBufferException(
+            e).setUnfinishedMessage(this);
+      } finally {
+        if (((mutable_bitField0_ & 0x00000001) != 0)) {
+          connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+        }
+        this.unknownFields = unknownFields.build();
+        makeExtensionsImmutable();
+      }
+    }
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+    }
+
+    public static final int CONNECTION_IDS_FIELD_NUMBER = 1;
+    private java.util.List<context.ContextOuterClass.ConnectionId> connectionIds_;
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<context.ContextOuterClass.ConnectionId> getConnectionIdsList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+        getConnectionIdsOrBuilderList() {
+      return connectionIds_;
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public int getConnectionIdsCount() {
+      return connectionIds_.size();
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionId getConnectionIds(int index) {
+      return connectionIds_.get(index);
+    }
+    /**
+     * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+     */
+    @java.lang.Override
+    public context.ContextOuterClass.ConnectionIdOrBuilder getConnectionIdsOrBuilder(
+        int index) {
+      return connectionIds_.get(index);
+    }
+
+    private byte memoizedIsInitialized = -1;
+    @java.lang.Override
+    public final boolean isInitialized() {
+      byte isInitialized = memoizedIsInitialized;
+      if (isInitialized == 1) return true;
+      if (isInitialized == 0) return false;
+
+      memoizedIsInitialized = 1;
+      return true;
+    }
+
+    @java.lang.Override
+    public void writeTo(com.google.protobuf.CodedOutputStream output)
+                        throws java.io.IOException {
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        output.writeMessage(1, connectionIds_.get(i));
+      }
+      unknownFields.writeTo(output);
+    }
+
+    @java.lang.Override
+    public int getSerializedSize() {
+      int size = memoizedSize;
+      if (size != -1) return size;
+
+      size = 0;
+      for (int i = 0; i < connectionIds_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connectionIds_.get(i));
+      }
+      size += unknownFields.getSerializedSize();
+      memoizedSize = size;
+      return size;
+    }
+
+    @java.lang.Override
+    public boolean equals(final java.lang.Object obj) {
+      if (obj == this) {
+       return true;
+      }
+      if (!(obj instanceof context.ContextOuterClass.ConnectionIdList)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.ConnectionIdList other = (context.ContextOuterClass.ConnectionIdList) obj;
+
+      if (!getConnectionIdsList()
+          .equals(other.getConnectionIdsList())) return false;
+      if (!unknownFields.equals(other.unknownFields)) return false;
+      return true;
+    }
+
+    @java.lang.Override
+    public int hashCode() {
+      if (memoizedHashCode != 0) {
+        return memoizedHashCode;
+      }
+      int hash = 41;
+      hash = (19 * hash) + getDescriptor().hashCode();
+      if (getConnectionIdsCount() > 0) {
+        hash = (37 * hash) + CONNECTION_IDS_FIELD_NUMBER;
+        hash = (53 * hash) + getConnectionIdsList().hashCode();
+      }
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.ByteString data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseDelimitedFrom(
+        java.io.InputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.ConnectionIdList parseFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input, extensionRegistry);
+    }
+
+    @java.lang.Override
+    public Builder newBuilderForType() { return newBuilder(); }
+    public static Builder newBuilder() {
+      return DEFAULT_INSTANCE.toBuilder();
+    }
+    public static Builder newBuilder(context.ContextOuterClass.ConnectionIdList prototype) {
+      return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+    }
+    @java.lang.Override
+    public Builder toBuilder() {
+      return this == DEFAULT_INSTANCE
+          ? new Builder() : new Builder().mergeFrom(this);
+    }
+
+    @java.lang.Override
+    protected Builder newBuilderForType(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      Builder builder = new Builder(parent);
+      return builder;
+    }
+    /**
+     * Protobuf type {@code context.ConnectionIdList}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.ConnectionIdList)
+        context.ContextOuterClass.ConnectionIdListOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.ConnectionIdList.class, context.ContextOuterClass.ConnectionIdList.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionIdList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      private void maybeForceBuilderInitialization() {
+        if (com.google.protobuf.GeneratedMessageV3
+                .alwaysUseFieldBuilders) {
+          getConnectionIdsFieldBuilder();
+        }
+      }
+      @java.lang.Override
+      public Builder clear() {
+        super.clear();
+        if (connectionIdsBuilder_ == null) {
+          connectionIds_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          connectionIdsBuilder_.clear();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionIdList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionIdList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList build() {
+        context.ContextOuterClass.ConnectionIdList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionIdList buildPartial() {
+        context.ContextOuterClass.ConnectionIdList result = new context.ContextOuterClass.ConnectionIdList(this);
+        int from_bitField0_ = bitField0_;
+        if (connectionIdsBuilder_ == null) {
+          if (((bitField0_ & 0x00000001) != 0)) {
+            connectionIds_ = java.util.Collections.unmodifiableList(connectionIds_);
+            bitField0_ = (bitField0_ & ~0x00000001);
+          }
+          result.connectionIds_ = connectionIds_;
+        } else {
+          result.connectionIds_ = connectionIdsBuilder_.build();
+        }
+        onBuilt();
+        return result;
+      }
+
+      @java.lang.Override
+      public Builder clone() {
+        return super.clone();
+      }
+      @java.lang.Override
+      public Builder setField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.setField(field, value);
+      }
+      @java.lang.Override
+      public Builder clearField(
+          com.google.protobuf.Descriptors.FieldDescriptor field) {
+        return super.clearField(field);
+      }
+      @java.lang.Override
+      public Builder clearOneof(
+          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+        return super.clearOneof(oneof);
+      }
+      @java.lang.Override
+      public Builder setRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          int index, java.lang.Object value) {
+        return super.setRepeatedField(field, index, value);
+      }
+      @java.lang.Override
+      public Builder addRepeatedField(
+          com.google.protobuf.Descriptors.FieldDescriptor field,
+          java.lang.Object value) {
+        return super.addRepeatedField(field, value);
+      }
+      @java.lang.Override
+      public Builder mergeFrom(com.google.protobuf.Message other) {
+        if (other instanceof context.ContextOuterClass.ConnectionIdList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionIdList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionIdList other) {
+        if (other == context.ContextOuterClass.ConnectionIdList.getDefaultInstance()) return this;
+        if (connectionIdsBuilder_ == null) {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIds_.isEmpty()) {
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionIdsIsMutable();
+              connectionIds_.addAll(other.connectionIds_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connectionIds_.isEmpty()) {
+            if (connectionIdsBuilder_.isEmpty()) {
+              connectionIdsBuilder_.dispose();
+              connectionIdsBuilder_ = null;
+              connectionIds_ = other.connectionIds_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionIdsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionIdsFieldBuilder() : null;
+            } else {
+              connectionIdsBuilder_.addAllMessages(other.connectionIds_);
+            }
+          }
+        }
+        this.mergeUnknownFields(other.unknownFields);
+        onChanged();
+        return this;
+      }
+
+      @java.lang.Override
+      public final boolean isInitialized() {
+        return true;
+      }
+
+      @java.lang.Override
+      public Builder mergeFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws java.io.IOException {
+        context.ContextOuterClass.ConnectionIdList parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.ConnectionIdList) e.getUnfinishedMessage();
+          throw e.unwrapIOException();
+        } finally {
+          if (parsedMessage != null) {
+            mergeFrom(parsedMessage);
+          }
+        }
+        return 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 {
+          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>
+       */
+      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);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionIdOrBuilder> 
+           getConnectionIdsOrBuilderList() {
+        if (connectionIdsBuilder_ != null) {
+          return connectionIdsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(connectionIds_);
+        }
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder() {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public context.ContextOuterClass.ConnectionId.Builder addConnectionIdsBuilder(
+          int index) {
+        return getConnectionIdsFieldBuilder().addBuilder(
+            index, context.ContextOuterClass.ConnectionId.getDefaultInstance());
+      }
+      /**
+       * <code>repeated .context.ConnectionId connection_ids = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.ConnectionId.Builder> 
+           getConnectionIdsBuilderList() {
+        return getConnectionIdsFieldBuilder().getBuilderList();
+      }
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder> 
+          getConnectionIdsFieldBuilder() {
+        if (connectionIdsBuilder_ == null) {
+          connectionIdsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+              context.ContextOuterClass.ConnectionId, context.ContextOuterClass.ConnectionId.Builder, context.ContextOuterClass.ConnectionIdOrBuilder>(
+                  connectionIds_,
+                  ((bitField0_ & 0x00000001) != 0),
+                  getParentForChildren(),
+                  isClean());
+          connectionIds_ = null;
+        }
+        return connectionIdsBuilder_;
+      }
+      @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.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 ConnectionIdList parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new ConnectionIdList(input, extensionRegistry);
+      }
+    };
+
+    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;
+            }
+            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)) {
+          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;
+    }
+
+    @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);
+    }
+
+    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 < connections_.size(); i++) {
+        output.writeMessage(1, connections_.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 < connections_.size(); i++) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(1, connections_.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.ConnectionList)) {
+        return super.equals(obj);
+      }
+      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;
+      }
+      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;
+    }
+
+    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);
+    }
+
+    @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);
+    }
+
+    @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;
+      }
+
+      @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);
+      }
+
+      // Construct using context.ContextOuterClass.ConnectionList.newBuilder()
+      private Builder() {
+        maybeForceBuilderInitialization();
+      }
+
+      private Builder(
+          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+        super(parent);
+        maybeForceBuilderInitialization();
+      }
+      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();
+        }
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_ConnectionList_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList getDefaultInstanceForType() {
+        return context.ContextOuterClass.ConnectionList.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.ConnectionList build() {
+        context.ContextOuterClass.ConnectionList result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @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 {
+          result.connections_ = connectionsBuilder_.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.ConnectionList) {
+          return mergeFrom((context.ContextOuterClass.ConnectionList)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.ConnectionList other) {
+        if (other == context.ContextOuterClass.ConnectionList.getDefaultInstance()) return this;
+        if (connectionsBuilder_ == null) {
+          if (!other.connections_.isEmpty()) {
+            if (connections_.isEmpty()) {
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+            } else {
+              ensureConnectionsIsMutable();
+              connections_.addAll(other.connections_);
+            }
+            onChanged();
+          }
+        } else {
+          if (!other.connections_.isEmpty()) {
+            if (connectionsBuilder_.isEmpty()) {
+              connectionsBuilder_.dispose();
+              connectionsBuilder_ = null;
+              connections_ = other.connections_;
+              bitField0_ = (bitField0_ & ~0x00000001);
+              connectionsBuilder_ = 
+                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                   getConnectionsFieldBuilder() : null;
+            } else {
+              connectionsBuilder_.addAllMessages(other.connections_);
+            }
+          }
+        }
+        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.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 this;
+      }
+      private int bitField0_;
+
+      private java.util.List<context.ContextOuterClass.Connection> connections_ =
+        java.util.Collections.emptyList();
+      private void ensureConnectionsIsMutable() {
+        if (!((bitField0_ & 0x00000001) != 0)) {
+          connections_ = new java.util.ArrayList<context.ContextOuterClass.Connection>(connections_);
+          bitField0_ |= 0x00000001;
+         }
+      }
+
+      private com.google.protobuf.RepeatedFieldBuilderV3<
+          context.ContextOuterClass.Connection, context.ContextOuterClass.Connection.Builder, context.ContextOuterClass.ConnectionOrBuilder> connectionsBuilder_;
+
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public java.util.List<context.ContextOuterClass.Connection> getConnectionsList() {
+        if (connectionsBuilder_ == null) {
+          return java.util.Collections.unmodifiableList(connections_);
+        } else {
+          return connectionsBuilder_.getMessageList();
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public int getConnectionsCount() {
+        if (connectionsBuilder_ == null) {
+          return connections_.size();
+        } else {
+          return connectionsBuilder_.getCount();
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public context.ContextOuterClass.Connection getConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);
+        } else {
+          return connectionsBuilder_.getMessage(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      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);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder setConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.set(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.setMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      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);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection value) {
+        if (connectionsBuilder_ == null) {
+          if (value == null) {
+            throw new NullPointerException();
+          }
+          ensureConnectionsIsMutable();
+          connections_.add(index, value);
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(index, value);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addConnections(
+          int index, context.ContextOuterClass.Connection.Builder builderForValue) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.add(index, builderForValue.build());
+          onChanged();
+        } else {
+          connectionsBuilder_.addMessage(index, builderForValue.build());
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder addAllConnections(
+          java.lang.Iterable<? extends context.ContextOuterClass.Connection> values) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          com.google.protobuf.AbstractMessageLite.Builder.addAll(
+              values, connections_);
+          onChanged();
+        } else {
+          connectionsBuilder_.addAllMessages(values);
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder clearConnections() {
+        if (connectionsBuilder_ == null) {
+          connections_ = java.util.Collections.emptyList();
+          bitField0_ = (bitField0_ & ~0x00000001);
+          onChanged();
+        } else {
+          connectionsBuilder_.clear();
+        }
+        return this;
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public Builder removeConnections(int index) {
+        if (connectionsBuilder_ == null) {
+          ensureConnectionsIsMutable();
+          connections_.remove(index);
+          onChanged();
+        } else {
+          connectionsBuilder_.remove(index);
+        }
+        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>
+       */
+      public context.ContextOuterClass.ConnectionOrBuilder getConnectionsOrBuilder(
+          int index) {
+        if (connectionsBuilder_ == null) {
+          return connections_.get(index);  } else {
+          return connectionsBuilder_.getMessageOrBuilder(index);
+        }
+      }
+      /**
+       * <code>repeated .context.Connection connections = 1;</code>
+       */
+      public java.util.List<? extends context.ContextOuterClass.ConnectionOrBuilder> 
+           getConnectionsOrBuilderList() {
+        if (connectionsBuilder_ != null) {
+          return connectionsBuilder_.getMessageOrBuilderList();
+        } else {
+          return java.util.Collections.unmodifiableList(connections_);
+        }
+      }
+      /**
+       * <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>
+       */
+      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),
+                  getParentForChildren(),
+                  isClean());
+          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 TeraFlowControllerOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.TeraFlowController)
+      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>string ip_address = 2;</code>
+     * @return The ipAddress.
+     */
+    java.lang.String getIpAddress();
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The bytes for ipAddress.
+     */
+    com.google.protobuf.ByteString
+        getIpAddressBytes();
+
+    /**
+     * <code>uint32 port = 3;</code>
+     * @return The port.
+     */
+    int getPort();
+  }
+  /**
+   * <pre>
+   * ----- Miscellaneous -------------------------------------------------------------------------------------------------
+   * </pre>
+   *
+   * Protobuf type {@code context.TeraFlowController}
+   */
+  public static final class TeraFlowController extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.TeraFlowController)
+      TeraFlowControllerOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use TeraFlowController.newBuilder() to construct.
+    private TeraFlowController(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private TeraFlowController() {
+      ipAddress_ = "";
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new TeraFlowController();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private TeraFlowController(
+        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: {
+              java.lang.String s = input.readStringRequireUtf8();
+
+              ipAddress_ = s;
+              break;
+            }
+            case 24: {
+
+              port_ = 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 context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_TeraFlowController_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.TeraFlowController.class, context.ContextOuterClass.TeraFlowController.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 IP_ADDRESS_FIELD_NUMBER = 2;
+    private volatile java.lang.Object ipAddress_;
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The ipAddress.
+     */
+    @java.lang.Override
+    public java.lang.String getIpAddress() {
+      java.lang.Object ref = ipAddress_;
+      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();
+        ipAddress_ = s;
+        return s;
+      }
+    }
+    /**
+     * <code>string ip_address = 2;</code>
+     * @return The bytes for ipAddress.
+     */
+    @java.lang.Override
+    public com.google.protobuf.ByteString
+        getIpAddressBytes() {
+      java.lang.Object ref = ipAddress_;
+      if (ref instanceof java.lang.String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        ipAddress_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+
+    public static final int PORT_FIELD_NUMBER = 3;
+    private int port_;
+    /**
+     * <code>uint32 port = 3;</code>
+     * @return The port.
+     */
+    @java.lang.Override
+    public int getPort() {
+      return port_;
+    }
+
+    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 (!getIpAddressBytes().isEmpty()) {
+        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, ipAddress_);
+      }
+      if (port_ != 0) {
+        output.writeUInt32(3, port_);
+      }
+      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 (!getIpAddressBytes().isEmpty()) {
+        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, ipAddress_);
+      }
+      if (port_ != 0) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeUInt32Size(3, port_);
+      }
+      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.TeraFlowController)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.TeraFlowController other = (context.ContextOuterClass.TeraFlowController) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (!getIpAddress()
+          .equals(other.getIpAddress())) return false;
+      if (getPort()
+          != other.getPort()) 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();
+      }
+      hash = (37 * hash) + IP_ADDRESS_FIELD_NUMBER;
+      hash = (53 * hash) + getIpAddress().hashCode();
+      hash = (37 * hash) + PORT_FIELD_NUMBER;
+      hash = (53 * hash) + getPort();
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TeraFlowController 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.TeraFlowController parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.TeraFlowController parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TeraFlowController 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.TeraFlowController parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TeraFlowController 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.TeraFlowController parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.TeraFlowController 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.TeraFlowController 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>
+     * ----- Miscellaneous -------------------------------------------------------------------------------------------------
+     * </pre>
+     *
+     * Protobuf type {@code context.TeraFlowController}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.TeraFlowController)
+        context.ContextOuterClass.TeraFlowControllerOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_TeraFlowController_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.TeraFlowController.class, context.ContextOuterClass.TeraFlowController.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.TeraFlowController.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;
+        }
+        ipAddress_ = "";
+
+        port_ = 0;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_TeraFlowController_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
+        return context.ContextOuterClass.TeraFlowController.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TeraFlowController build() {
+        context.ContextOuterClass.TeraFlowController result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.TeraFlowController buildPartial() {
+        context.ContextOuterClass.TeraFlowController result = new context.ContextOuterClass.TeraFlowController(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        result.ipAddress_ = ipAddress_;
+        result.port_ = port_;
+        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.TeraFlowController) {
+          return mergeFrom((context.ContextOuterClass.TeraFlowController)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.TeraFlowController other) {
+        if (other == context.ContextOuterClass.TeraFlowController.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (!other.getIpAddress().isEmpty()) {
+          ipAddress_ = other.ipAddress_;
+          onChanged();
+        }
+        if (other.getPort() != 0) {
+          setPort(other.getPort());
+        }
+        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.TeraFlowController parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.TeraFlowController) 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 java.lang.Object ipAddress_ = "";
+      /**
+       * <code>string ip_address = 2;</code>
+       * @return The ipAddress.
+       */
+      public java.lang.String getIpAddress() {
+        java.lang.Object ref = ipAddress_;
+        if (!(ref instanceof java.lang.String)) {
+          com.google.protobuf.ByteString bs =
+              (com.google.protobuf.ByteString) ref;
+          java.lang.String s = bs.toStringUtf8();
+          ipAddress_ = s;
+          return s;
+        } else {
+          return (java.lang.String) ref;
+        }
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @return The bytes for ipAddress.
+       */
+      public com.google.protobuf.ByteString
+          getIpAddressBytes() {
+        java.lang.Object ref = ipAddress_;
+        if (ref instanceof String) {
+          com.google.protobuf.ByteString b = 
+              com.google.protobuf.ByteString.copyFromUtf8(
+                  (java.lang.String) ref);
+          ipAddress_ = b;
+          return b;
+        } else {
+          return (com.google.protobuf.ByteString) ref;
+        }
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @param value The ipAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIpAddress(
+          java.lang.String value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  
+        ipAddress_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearIpAddress() {
+        
+        ipAddress_ = getDefaultInstance().getIpAddress();
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>string ip_address = 2;</code>
+       * @param value The bytes for ipAddress to set.
+       * @return This builder for chaining.
+       */
+      public Builder setIpAddressBytes(
+          com.google.protobuf.ByteString value) {
+        if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+        
+        ipAddress_ = value;
+        onChanged();
+        return this;
+      }
+
+      private int port_ ;
+      /**
+       * <code>uint32 port = 3;</code>
+       * @return The port.
+       */
+      @java.lang.Override
+      public int getPort() {
+        return port_;
+      }
+      /**
+       * <code>uint32 port = 3;</code>
+       * @param value The port to set.
+       * @return This builder for chaining.
+       */
+      public Builder setPort(int value) {
+        
+        port_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>uint32 port = 3;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearPort() {
+        
+        port_ = 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:context.TeraFlowController)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.TeraFlowController)
+    private static final context.ContextOuterClass.TeraFlowController DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.TeraFlowController();
+    }
+
+    public static context.ContextOuterClass.TeraFlowController getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<TeraFlowController>
+        PARSER = new com.google.protobuf.AbstractParser<TeraFlowController>() {
+      @java.lang.Override
+      public TeraFlowController parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new TeraFlowController(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<TeraFlowController> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<TeraFlowController> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.TeraFlowController getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  public interface AuthenticationResultOrBuilder extends
+      // @@protoc_insertion_point(interface_extends:context.AuthenticationResult)
+      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>bool authenticated = 2;</code>
+     * @return The authenticated.
+     */
+    boolean getAuthenticated();
+  }
+  /**
+   * Protobuf type {@code context.AuthenticationResult}
+   */
+  public static final class AuthenticationResult extends
+      com.google.protobuf.GeneratedMessageV3 implements
+      // @@protoc_insertion_point(message_implements:context.AuthenticationResult)
+      AuthenticationResultOrBuilder {
+  private static final long serialVersionUID = 0L;
+    // Use AuthenticationResult.newBuilder() to construct.
+    private AuthenticationResult(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+      super(builder);
+    }
+    private AuthenticationResult() {
+    }
+
+    @java.lang.Override
+    @SuppressWarnings({"unused"})
+    protected java.lang.Object newInstance(
+        UnusedPrivateParameter unused) {
+      return new AuthenticationResult();
+    }
+
+    @java.lang.Override
+    public final com.google.protobuf.UnknownFieldSet
+    getUnknownFields() {
+      return this.unknownFields;
+    }
+    private AuthenticationResult(
+        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 16: {
+
+              authenticated_ = 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 context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return context.ContextOuterClass.internal_static_context_AuthenticationResult_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              context.ContextOuterClass.AuthenticationResult.class, context.ContextOuterClass.AuthenticationResult.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 AUTHENTICATED_FIELD_NUMBER = 2;
+    private boolean authenticated_;
+    /**
+     * <code>bool authenticated = 2;</code>
+     * @return The authenticated.
+     */
+    @java.lang.Override
+    public boolean getAuthenticated() {
+      return authenticated_;
+    }
+
+    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 (authenticated_ != false) {
+        output.writeBool(2, authenticated_);
+      }
+      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 (authenticated_ != false) {
+        size += com.google.protobuf.CodedOutputStream
+          .computeBoolSize(2, authenticated_);
+      }
+      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.AuthenticationResult)) {
+        return super.equals(obj);
+      }
+      context.ContextOuterClass.AuthenticationResult other = (context.ContextOuterClass.AuthenticationResult) obj;
+
+      if (hasContextId() != other.hasContextId()) return false;
+      if (hasContextId()) {
+        if (!getContextId()
+            .equals(other.getContextId())) return false;
+      }
+      if (getAuthenticated()
+          != other.getAuthenticated()) 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();
+      }
+      hash = (37 * hash) + AUTHENTICATED_FIELD_NUMBER;
+      hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+          getAuthenticated());
+      hash = (29 * hash) + unknownFields.hashCode();
+      memoizedHashCode = hash;
+      return hash;
+    }
+
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        java.nio.ByteBuffer data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        java.nio.ByteBuffer data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        com.google.protobuf.ByteString data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.AuthenticationResult 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.AuthenticationResult parseFrom(byte[] data)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(
+        byte[] data,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return PARSER.parseFrom(data, extensionRegistry);
+    }
+    public static context.ContextOuterClass.AuthenticationResult parseFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.AuthenticationResult 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.AuthenticationResult parseDelimitedFrom(java.io.InputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseDelimitedWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.AuthenticationResult 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.AuthenticationResult parseFrom(
+        com.google.protobuf.CodedInputStream input)
+        throws java.io.IOException {
+      return com.google.protobuf.GeneratedMessageV3
+          .parseWithIOException(PARSER, input);
+    }
+    public static context.ContextOuterClass.AuthenticationResult 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.AuthenticationResult 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.AuthenticationResult}
+     */
+    public static final class Builder extends
+        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+        // @@protoc_insertion_point(builder_implements:context.AuthenticationResult)
+        context.ContextOuterClass.AuthenticationResultOrBuilder {
+      public static final com.google.protobuf.Descriptors.Descriptor
+          getDescriptor() {
+        return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+      }
+
+      @java.lang.Override
+      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+          internalGetFieldAccessorTable() {
+        return context.ContextOuterClass.internal_static_context_AuthenticationResult_fieldAccessorTable
+            .ensureFieldAccessorsInitialized(
+                context.ContextOuterClass.AuthenticationResult.class, context.ContextOuterClass.AuthenticationResult.Builder.class);
+      }
+
+      // Construct using context.ContextOuterClass.AuthenticationResult.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;
+        }
+        authenticated_ = false;
+
+        return this;
+      }
+
+      @java.lang.Override
+      public com.google.protobuf.Descriptors.Descriptor
+          getDescriptorForType() {
+        return context.ContextOuterClass.internal_static_context_AuthenticationResult_descriptor;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+        return context.ContextOuterClass.AuthenticationResult.getDefaultInstance();
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.AuthenticationResult build() {
+        context.ContextOuterClass.AuthenticationResult result = buildPartial();
+        if (!result.isInitialized()) {
+          throw newUninitializedMessageException(result);
+        }
+        return result;
+      }
+
+      @java.lang.Override
+      public context.ContextOuterClass.AuthenticationResult buildPartial() {
+        context.ContextOuterClass.AuthenticationResult result = new context.ContextOuterClass.AuthenticationResult(this);
+        if (contextIdBuilder_ == null) {
+          result.contextId_ = contextId_;
+        } else {
+          result.contextId_ = contextIdBuilder_.build();
+        }
+        result.authenticated_ = authenticated_;
+        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.AuthenticationResult) {
+          return mergeFrom((context.ContextOuterClass.AuthenticationResult)other);
+        } else {
+          super.mergeFrom(other);
+          return this;
+        }
+      }
+
+      public Builder mergeFrom(context.ContextOuterClass.AuthenticationResult other) {
+        if (other == context.ContextOuterClass.AuthenticationResult.getDefaultInstance()) return this;
+        if (other.hasContextId()) {
+          mergeContextId(other.getContextId());
+        }
+        if (other.getAuthenticated() != false) {
+          setAuthenticated(other.getAuthenticated());
+        }
+        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.AuthenticationResult parsedMessage = null;
+        try {
+          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+          parsedMessage = (context.ContextOuterClass.AuthenticationResult) 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 boolean authenticated_ ;
+      /**
+       * <code>bool authenticated = 2;</code>
+       * @return The authenticated.
+       */
+      @java.lang.Override
+      public boolean getAuthenticated() {
+        return authenticated_;
+      }
+      /**
+       * <code>bool authenticated = 2;</code>
+       * @param value The authenticated to set.
+       * @return This builder for chaining.
+       */
+      public Builder setAuthenticated(boolean value) {
+        
+        authenticated_ = value;
+        onChanged();
+        return this;
+      }
+      /**
+       * <code>bool authenticated = 2;</code>
+       * @return This builder for chaining.
+       */
+      public Builder clearAuthenticated() {
+        
+        authenticated_ = false;
+        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.AuthenticationResult)
+    }
+
+    // @@protoc_insertion_point(class_scope:context.AuthenticationResult)
+    private static final context.ContextOuterClass.AuthenticationResult DEFAULT_INSTANCE;
+    static {
+      DEFAULT_INSTANCE = new context.ContextOuterClass.AuthenticationResult();
+    }
+
+    public static context.ContextOuterClass.AuthenticationResult getDefaultInstance() {
+      return DEFAULT_INSTANCE;
+    }
+
+    private static final com.google.protobuf.Parser<AuthenticationResult>
+        PARSER = new com.google.protobuf.AbstractParser<AuthenticationResult>() {
+      @java.lang.Override
+      public AuthenticationResult parsePartialFrom(
+          com.google.protobuf.CodedInputStream input,
+          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+          throws com.google.protobuf.InvalidProtocolBufferException {
+        return new AuthenticationResult(input, extensionRegistry);
+      }
+    };
+
+    public static com.google.protobuf.Parser<AuthenticationResult> parser() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Parser<AuthenticationResult> getParserForType() {
+      return PARSER;
+    }
+
+    @java.lang.Override
+    public context.ContextOuterClass.AuthenticationResult getDefaultInstanceForType() {
+      return DEFAULT_INSTANCE;
+    }
+
+  }
+
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Empty_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Empty_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Uuid_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Uuid_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Event_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Event_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Context_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Context_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ContextEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ContextEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Topology_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Topology_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TopologyEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TopologyEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Device_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Device_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceConfig_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_DeviceEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_DeviceEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Link_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Link_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_LinkEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_LinkEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Service_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Service_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceStatus_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceStatus_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceConfig_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceConfig_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ServiceEvent_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ServiceEvent_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPointId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_EndPointId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_EndPoint_descriptor;
+  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_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_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Constraint_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionId_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionId_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_Connection_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_Connection_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionIdList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionIdList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_ConnectionList_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_ConnectionList_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_TeraFlowController_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_TeraFlowController_fieldAccessorTable;
+  private static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_context_AuthenticationResult_descriptor;
+  private static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_context_AuthenticationResult_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\rcontext.proto\022\007context\"\007\n\005Empty\"\024\n\004Uui" +
+      "d\022\014\n\004uuid\030\001 \001(\t\"F\n\005Event\022\021\n\ttimestamp\030\001 " +
+      "\001(\001\022*\n\nevent_type\030\002 \001(\0162\026.context.EventT" +
+      "ypeEnum\"0\n\tContextId\022#\n\014context_uuid\030\001 \001" +
+      "(\0132\r.context.Uuid\"\266\001\n\007Context\022&\n\ncontext" +
+      "_id\030\001 \001(\0132\022.context.ContextId\022)\n\014topolog" +
+      "y_ids\030\002 \003(\0132\023.context.TopologyId\022\'\n\013serv" +
+      "ice_ids\030\003 \003(\0132\022.context.ServiceId\022/\n\ncon" +
+      "troller\030\004 \001(\0132\033.context.TeraFlowControll" +
+      "er\"8\n\rContextIdList\022\'\n\013context_ids\030\001 \003(\013" +
+      "2\022.context.ContextId\"1\n\013ContextList\022\"\n\010c" +
+      "ontexts\030\001 \003(\0132\020.context.Context\"U\n\014Conte" +
+      "xtEvent\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\ncontext_id\030\001 \001(\0132\022.conte" +
+      "xt.ContextId\022$\n\rtopology_uuid\030\002 \001(\0132\r.co" +
+      "ntext.Uuid\"~\n\010Topology\022(\n\013topology_id\030\001 " +
+      "\001(\0132\023.context.TopologyId\022%\n\ndevice_ids\030\002" +
+      " \003(\0132\021.context.DeviceId\022!\n\010link_ids\030\003 \003(" +
+      "\0132\017.context.LinkId\";\n\016TopologyIdList\022)\n\014" +
+      "topology_ids\030\001 \003(\0132\023.context.TopologyId\"" +
+      "5\n\014TopologyList\022%\n\ntopologies\030\001 \003(\0132\021.co" +
+      "ntext.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.TopologyId\".\n\010DeviceId\022\"\n\013" +
+      "device_uuid\030\001 \001(\0132\r.context.Uuid\"\232\002\n\006Dev" +
+      "ice\022$\n\tdevice_id\030\001 \001(\0132\021.context.DeviceI" +
+      "d\022\023\n\013device_type\030\002 \001(\t\022,\n\rdevice_config\030" +
+      "\003 \001(\0132\025.context.DeviceConfig\022G\n\031device_o" +
+      "perational_status\030\004 \001(\0162$.context.Device" +
+      "OperationalStatusEnum\0221\n\016device_drivers\030" +
+      "\005 \003(\0162\031.context.DeviceDriverEnum\022+\n\020devi" +
+      "ce_endpoints\030\006 \003(\0132\021.context.EndPoint\"9\n" +
+      "\014DeviceConfig\022)\n\014config_rules\030\001 \003(\0132\023.co" +
+      "ntext.ConfigRule\"5\n\014DeviceIdList\022%\n\ndevi" +
+      "ce_ids\030\001 \003(\0132\021.context.DeviceId\".\n\nDevic" +
+      "eList\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.Devic" +
+      "eId\"*\n\006LinkId\022 \n\tlink_uuid\030\001 \001(\0132\r.conte" +
+      "xt.Uuid\"X\n\004Link\022 \n\007link_id\030\001 \001(\0132\017.conte" +
+      "xt.LinkId\022.\n\021link_endpoint_ids\030\002 \003(\0132\023.c" +
+      "ontext.EndPointId\"/\n\nLinkIdList\022!\n\010link_" +
+      "ids\030\001 \003(\0132\017.context.LinkId\"(\n\010LinkList\022\034" +
+      "\n\005links\030\001 \003(\0132\r.context.Link\"L\n\tLinkEven" +
+      "t\022\035\n\005event\030\001 \001(\0132\016.context.Event\022 \n\007link" +
+      "_id\030\002 \001(\0132\017.context.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\nservice_id\030\001 \001(\0132\022.context.S" +
+      "erviceId\022.\n\014service_type\030\002 \001(\0162\030.context" +
+      ".ServiceTypeEnum\0221\n\024service_endpoint_ids" +
+      "\030\003 \003(\0132\023.context.EndPointId\0220\n\023service_c" +
+      "onstraints\030\004 \003(\0132\023.context.Constraint\022.\n" +
+      "\016service_status\030\005 \001(\0132\026.context.ServiceS" +
+      "tatus\022.\n\016service_config\030\006 \001(\0132\026.context." +
+      "ServiceConfig\"C\n\rServiceStatus\0222\n\016servic" +
+      "e_status\030\001 \001(\0162\032.context.ServiceStatusEn" +
+      "um\":\n\rServiceConfig\022)\n\014config_rules\030\001 \003(" +
+      "\0132\023.context.ConfigRule\"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.cont" +
+      "ext.Service\"U\n\014ServiceEvent\022\035\n\005event\030\001 \001" +
+      "(\0132\016.context.Event\022&\n\nservice_id\030\002 \001(\0132\022" +
+      ".context.ServiceId\"\202\001\n\nEndPointId\022(\n\013top" +
+      "ology_id\030\001 \001(\0132\023.context.TopologyId\022$\n\td" +
+      "evice_id\030\002 \001(\0132\021.context.DeviceId\022$\n\rend" +
+      "point_uuid\030\003 \001(\0132\r.context.Uuid\"K\n\010EndPo" +
+      "int\022(\n\013endpoint_id\030\001 \001(\0132\023.context.EndPo" +
+      "intId\022\025\n\rendpoint_type\030\002 \001(\t\"e\n\nConfigRu" +
+      "le\022)\n\006action\030\001 \001(\0162\031.context.ConfigActio" +
+      "nEnum\022\024\n\014resource_key\030\002 \001(\t\022\026\n\016resource_" +
+      "value\030\003 \001(\t\"?\n\nConstraint\022\027\n\017constraint_" +
+      "type\030\001 \001(\t\022\030\n\020constraint_value\030\002 \001(\t\"6\n\014" +
+      "ConnectionId\022&\n\017connection_uuid\030\001 \001(\0132\r." +
+      "context.Uuid\"\215\001\n\nConnection\022,\n\rconnectio" +
+      "n_id\030\001 \001(\0132\025.context.ConnectionId\022.\n\022rel" +
+      "ated_service_id\030\002 \001(\0132\022.context.ServiceI" +
+      "d\022!\n\004path\030\003 \003(\0132\023.context.EndPointId\"A\n\020" +
+      "ConnectionIdList\022-\n\016connection_ids\030\001 \003(\013" +
+      "2\025.context.ConnectionId\":\n\016ConnectionLis" +
+      "t\022(\n\013connections\030\001 \003(\0132\023.context.Connect" +
+      "ion\"^\n\022TeraFlowController\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\024AuthenticationRes" +
+      "ult\022&\n\ncontext_id\030\001 \001(\0132\022.context.Contex" +
+      "tId\022\025\n\rauthenticated\030\002 \001(\010*j\n\rEventTypeE" +
+      "num\022\027\n\023EVENTTYPE_UNDEFINED\020\000\022\024\n\020EVENTTYP" +
+      "E_CREATE\020\001\022\024\n\020EVENTTYPE_UPDATE\020\002\022\024\n\020EVEN" +
+      "TTYPE_REMOVE\020\003*\305\001\n\020DeviceDriverEnum\022\032\n\026D" +
+      "EVICEDRIVER_UNDEFINED\020\000\022\033\n\027DEVICEDRIVER_" +
+      "OPENCONFIG\020\001\022\036\n\032DEVICEDRIVER_TRANSPORT_A" +
+      "PI\020\002\022\023\n\017DEVICEDRIVER_P4\020\003\022&\n\"DEVICEDRIVE" +
+      "R_IETF_NETWORK_TOPOLOGY\020\004\022\033\n\027DEVICEDRIVE" +
+      "R_ONF_TR_352\020\005*\217\001\n\033DeviceOperationalStat" +
+      "usEnum\022%\n!DEVICEOPERATIONALSTATUS_UNDEFI" +
+      "NED\020\000\022$\n DEVICEOPERATIONALSTATUS_DISABLE" +
+      "D\020\001\022#\n\037DEVICEOPERATIONALSTATUS_ENABLED\020\002" +
+      "*\201\001\n\017ServiceTypeEnum\022\027\n\023SERVICETYPE_UNKN" +
+      "OWN\020\000\022\024\n\020SERVICETYPE_L3NM\020\001\022\024\n\020SERVICETY" +
+      "PE_L2NM\020\002\022)\n%SERVICETYPE_TAPI_CONNECTIVI" +
+      "TY_SERVICE\020\003*\210\001\n\021ServiceStatusEnum\022\033\n\027SE" +
+      "RVICESTATUS_UNDEFINED\020\000\022\031\n\025SERVICESTATUS" +
+      "_PLANNED\020\001\022\030\n\024SERVICESTATUS_ACTIVE\020\002\022!\n\035" +
+      "SERVICESTATUS_PENDING_REMOVAL\020\003*]\n\020Confi" +
+      "gActionEnum\022\032\n\026CONFIGACTION_UNDEFINED\020\000\022" +
+      "\024\n\020CONFIGACTION_SET\020\001\022\027\n\023CONFIGACTION_DE" +
+      "LETE\020\0022\245\r\n\016ContextService\022:\n\016ListContext" +
+      "Ids\022\016.context.Empty\032\026.context.ContextIdL" +
+      "ist\"\000\0226\n\014ListContexts\022\016.context.Empty\032\024." +
+      "context.ContextList\"\000\0224\n\nGetContext\022\022.co" +
+      "ntext.ContextId\032\020.context.Context\"\000\0224\n\nS" +
+      "etContext\022\020.context.Context\032\022.context.Co" +
+      "ntextId\"\000\0225\n\rRemoveContext\022\022.context.Con" +
+      "textId\032\016.context.Empty\"\000\022=\n\020GetContextEv" +
+      "ents\022\016.context.Empty\032\025.context.ContextEv" +
+      "ent\"\0000\001\022@\n\017ListTopologyIds\022\022.context.Con" +
+      "textId\032\027.context.TopologyIdList\"\000\022=\n\016Lis" +
+      "tTopologies\022\022.context.ContextId\032\025.contex" +
+      "t.TopologyList\"\000\0227\n\013GetTopology\022\023.contex" +
+      "t.TopologyId\032\021.context.Topology\"\000\0227\n\013Set" +
+      "Topology\022\021.context.Topology\032\023.context.To" +
+      "pologyId\"\000\0227\n\016RemoveTopology\022\023.context.T" +
+      "opologyId\032\016.context.Empty\"\000\022?\n\021GetTopolo" +
+      "gyEvents\022\016.context.Empty\032\026.context.Topol" +
+      "ogyEvent\"\0000\001\0228\n\rListDeviceIds\022\016.context." +
+      "Empty\032\025.context.DeviceIdList\"\000\0224\n\013ListDe" +
+      "vices\022\016.context.Empty\032\023.context.DeviceLi" +
+      "st\"\000\0221\n\tGetDevice\022\021.context.DeviceId\032\017.c" +
+      "ontext.Device\"\000\0221\n\tSetDevice\022\017.context.D" +
+      "evice\032\021.context.DeviceId\"\000\0223\n\014RemoveDevi" +
+      "ce\022\021.context.DeviceId\032\016.context.Empty\"\000\022" +
+      ";\n\017GetDeviceEvents\022\016.context.Empty\032\024.con" +
+      "text.DeviceEvent\"\0000\001\0224\n\013ListLinkIds\022\016.co" +
+      "ntext.Empty\032\023.context.LinkIdList\"\000\0220\n\tLi" +
+      "stLinks\022\016.context.Empty\032\021.context.LinkLi" +
+      "st\"\000\022+\n\007GetLink\022\017.context.LinkId\032\r.conte" +
+      "xt.Link\"\000\022+\n\007SetLink\022\r.context.Link\032\017.co" +
+      "ntext.LinkId\"\000\022/\n\nRemoveLink\022\017.context.L" +
+      "inkId\032\016.context.Empty\"\000\0227\n\rGetLinkEvents" +
+      "\022\016.context.Empty\032\022.context.LinkEvent\"\0000\001" +
+      "\022>\n\016ListServiceIds\022\022.context.ContextId\032\026" +
+      ".context.ServiceIdList\"\000\022:\n\014ListServices" +
+      "\022\022.context.ContextId\032\024.context.ServiceLi" +
+      "st\"\000\0224\n\nGetService\022\022.context.ServiceId\032\020" +
+      ".context.Service\"\000\0224\n\nSetService\022\020.conte" +
+      "xt.Service\032\022.context.ServiceId\"\000\0225\n\rRemo" +
+      "veService\022\022.context.ServiceId\032\016.context." +
+      "Empty\"\000\022=\n\020GetServiceEvents\022\016.context.Em" +
+      "pty\032\025.context.ServiceEvent\"\0000\001b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+        });
+    internal_static_context_Empty_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_context_Empty_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Empty_descriptor,
+        new java.lang.String[] { });
+    internal_static_context_Uuid_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_context_Uuid_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Uuid_descriptor,
+        new java.lang.String[] { "Uuid", });
+    internal_static_context_Event_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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);
+    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", });
+    internal_static_context_ServiceStatus_descriptor =
+      getDescriptor().getMessageTypes().get(26);
+    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);
+    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);
+    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);
+    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);
+    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_EndPointId_descriptor =
+      getDescriptor().getMessageTypes().get(31);
+    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(32);
+    internal_static_context_EndPoint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_EndPoint_descriptor,
+        new java.lang.String[] { "EndpointId", "EndpointType", });
+    internal_static_context_ConfigRule_descriptor =
+      getDescriptor().getMessageTypes().get(33);
+    internal_static_context_ConfigRule_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConfigRule_descriptor,
+        new java.lang.String[] { "Action", "ResourceKey", "ResourceValue", });
+    internal_static_context_Constraint_descriptor =
+      getDescriptor().getMessageTypes().get(34);
+    internal_static_context_Constraint_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Constraint_descriptor,
+        new java.lang.String[] { "ConstraintType", "ConstraintValue", });
+    internal_static_context_ConnectionId_descriptor =
+      getDescriptor().getMessageTypes().get(35);
+    internal_static_context_ConnectionId_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionId_descriptor,
+        new java.lang.String[] { "ConnectionUuid", });
+    internal_static_context_Connection_descriptor =
+      getDescriptor().getMessageTypes().get(36);
+    internal_static_context_Connection_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_Connection_descriptor,
+        new java.lang.String[] { "ConnectionId", "RelatedServiceId", "Path", });
+    internal_static_context_ConnectionIdList_descriptor =
+      getDescriptor().getMessageTypes().get(37);
+    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(38);
+    internal_static_context_ConnectionList_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_ConnectionList_descriptor,
+        new java.lang.String[] { "Connections", });
+    internal_static_context_TeraFlowController_descriptor =
+      getDescriptor().getMessageTypes().get(39);
+    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(40);
+    internal_static_context_AuthenticationResult_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_context_AuthenticationResult_descriptor,
+        new java.lang.String[] { "ContextId", "Authenticated", });
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/automation/target/generated-sources/grpc/context/ContextService.java b/src/automation/target/generated-sources/grpc/context/ContextService.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e5095d25896abc5ff37b7a5e7d4ac7f97825dc6
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/context/ContextService.java
@@ -0,0 +1,74 @@
+package context;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context.proto")
+public interface ContextService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request);
+    
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request);
+    
+    io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request);
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java b/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..fbecd5d2f3cdf04e9f47693a4aeea37753855cdf
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/context/ContextServiceBean.java
@@ -0,0 +1,264 @@
+package context;
+
+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.proto")
+public class ContextServiceBean extends MutinyContextServiceGrpc.ContextServiceImplBase implements BindableService, MutinyBean {
+
+    private final ContextService delegate;
+
+    ContextServiceBean(@GrpcService ContextService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listContextIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listContexts(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.getContext(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+       try {
+         return delegate.setContext(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.removeContext(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listTopologyIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listTopologies(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+       try {
+         return delegate.getTopology(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+       try {
+         return delegate.setTopology(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+       try {
+         return delegate.removeTopology(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listDeviceIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listDevices(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.getDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+       try {
+         return delegate.setDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.removeDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listLinkIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.listLinks(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+       try {
+         return delegate.getLink(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+       try {
+         return delegate.setLink(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+       try {
+         return delegate.removeLink(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listServiceIds(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+       try {
+         return delegate.listServices(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.getService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+       try {
+         return delegate.setService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+       try {
+         return delegate.removeService(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getContextEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getTopologyEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getDeviceEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getLinkEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+       try {
+         return delegate.getServiceEvents(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java b/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..6e815b940e668e33bf936d7d9de0930d086ff9a3
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/context/ContextServiceClient.java
@@ -0,0 +1,149 @@
+package context;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: context.proto")
+public class ContextServiceClient implements ContextService, MutinyClient<MutinyContextServiceGrpc.MutinyContextServiceStub> {
+
+    private final MutinyContextServiceGrpc.MutinyContextServiceStub stub;
+
+    public ContextServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyContextServiceGrpc.MutinyContextServiceStub, MutinyContextServiceGrpc.MutinyContextServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyContextServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyContextServiceGrpc.MutinyContextServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+       return stub.listContextIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+       return stub.listContexts(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+       return stub.getContext(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+       return stub.setContext(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+       return stub.removeContext(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+       return stub.listTopologyIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+       return stub.listTopologies(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+       return stub.getTopology(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+       return stub.setTopology(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+       return stub.removeTopology(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+       return stub.listDeviceIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+       return stub.listDevices(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+       return stub.getDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+       return stub.setDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+       return stub.removeDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+       return stub.listLinkIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+       return stub.listLinks(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+       return stub.getLink(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+       return stub.setLink(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+       return stub.removeLink(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+       return stub.listServiceIds(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+       return stub.listServices(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+       return stub.getService(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+       return stub.setService(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+       return stub.removeService(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+       return stub.getContextEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+       return stub.getTopologyEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+       return stub.getDeviceEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+       return stub.getLinkEvents(request);
+    }
+
+    @Override
+    public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+       return stub.getServiceEvents(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java b/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..03f2a66f6f09ed54eb1c359a356ba5240b184166
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/context/ContextServiceGrpc.java
@@ -0,0 +1,2386 @@
+package context;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: context.proto")
+public final class ContextServiceGrpc {
+
+  private ContextServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "context.ContextService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextIdList> getListContextIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListContextIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ContextIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextIdList> getListContextIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList> getListContextIdsMethod;
+    if ((getListContextIdsMethod = ContextServiceGrpc.getListContextIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListContextIdsMethod = ContextServiceGrpc.getListContextIdsMethod) == null) {
+          ContextServiceGrpc.getListContextIdsMethod = getListContextIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListContextIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListContextIds"))
+              .build();
+        }
+      }
+    }
+    return getListContextIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextList> getListContextsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListContexts",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ContextList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextList> getListContextsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList> getListContextsMethod;
+    if ((getListContextsMethod = ContextServiceGrpc.getListContextsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListContextsMethod = ContextServiceGrpc.getListContextsMethod) == null) {
+          ContextServiceGrpc.getListContextsMethod = getListContextsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListContexts"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListContexts"))
+              .build();
+        }
+      }
+    }
+    return getListContextsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Context> getGetContextMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetContext",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.Context.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Context> getGetContextMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context> getGetContextMethod;
+    if ((getGetContextMethod = ContextServiceGrpc.getGetContextMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetContextMethod = ContextServiceGrpc.getGetContextMethod) == null) {
+          ContextServiceGrpc.getGetContextMethod = getGetContextMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.Context>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetContext"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Context.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetContext"))
+              .build();
+        }
+      }
+    }
+    return getGetContextMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Context,
+      context.ContextOuterClass.ContextId> getSetContextMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetContext",
+      requestType = context.ContextOuterClass.Context.class,
+      responseType = context.ContextOuterClass.ContextId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Context,
+      context.ContextOuterClass.ContextId> getSetContextMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId> getSetContextMethod;
+    if ((getSetContextMethod = ContextServiceGrpc.getSetContextMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetContextMethod = ContextServiceGrpc.getSetContextMethod) == null) {
+          ContextServiceGrpc.getSetContextMethod = getSetContextMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Context, context.ContextOuterClass.ContextId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetContext"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Context.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetContext"))
+              .build();
+        }
+      }
+    }
+    return getSetContextMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Empty> getRemoveContextMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveContext",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.Empty> getRemoveContextMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty> getRemoveContextMethod;
+    if ((getRemoveContextMethod = ContextServiceGrpc.getRemoveContextMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveContextMethod = ContextServiceGrpc.getRemoveContextMethod) == null) {
+          ContextServiceGrpc.getRemoveContextMethod = getRemoveContextMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveContext"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveContext"))
+              .build();
+        }
+      }
+    }
+    return getRemoveContextMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextEvent> getGetContextEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetContextEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ContextEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ContextEvent> getGetContextEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent> getGetContextEventsMethod;
+    if ((getGetContextEventsMethod = ContextServiceGrpc.getGetContextEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetContextEventsMethod = ContextServiceGrpc.getGetContextEventsMethod) == null) {
+          ContextServiceGrpc.getGetContextEventsMethod = getGetContextEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ContextEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetContextEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetContextEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetContextEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyIdList> getListTopologyIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListTopologyIds",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.TopologyIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyIdList> getListTopologyIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList> getListTopologyIdsMethod;
+    if ((getListTopologyIdsMethod = ContextServiceGrpc.getListTopologyIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListTopologyIdsMethod = ContextServiceGrpc.getListTopologyIdsMethod) == null) {
+          ContextServiceGrpc.getListTopologyIdsMethod = getListTopologyIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListTopologyIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListTopologyIds"))
+              .build();
+        }
+      }
+    }
+    return getListTopologyIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyList> getListTopologiesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListTopologies",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.TopologyList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.TopologyList> getListTopologiesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList> getListTopologiesMethod;
+    if ((getListTopologiesMethod = ContextServiceGrpc.getListTopologiesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListTopologiesMethod = ContextServiceGrpc.getListTopologiesMethod) == null) {
+          ContextServiceGrpc.getListTopologiesMethod = getListTopologiesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.TopologyList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListTopologies"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListTopologies"))
+              .build();
+        }
+      }
+    }
+    return getListTopologiesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Topology> getGetTopologyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetTopology",
+      requestType = context.ContextOuterClass.TopologyId.class,
+      responseType = context.ContextOuterClass.Topology.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Topology> getGetTopologyMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology> getGetTopologyMethod;
+    if ((getGetTopologyMethod = ContextServiceGrpc.getGetTopologyMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetTopologyMethod = ContextServiceGrpc.getGetTopologyMethod) == null) {
+          ContextServiceGrpc.getGetTopologyMethod = getGetTopologyMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Topology>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetTopology"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Topology.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetTopology"))
+              .build();
+        }
+      }
+    }
+    return getGetTopologyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Topology,
+      context.ContextOuterClass.TopologyId> getSetTopologyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetTopology",
+      requestType = context.ContextOuterClass.Topology.class,
+      responseType = context.ContextOuterClass.TopologyId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Topology,
+      context.ContextOuterClass.TopologyId> getSetTopologyMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId> getSetTopologyMethod;
+    if ((getSetTopologyMethod = ContextServiceGrpc.getSetTopologyMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetTopologyMethod = ContextServiceGrpc.getSetTopologyMethod) == null) {
+          ContextServiceGrpc.getSetTopologyMethod = getSetTopologyMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Topology, context.ContextOuterClass.TopologyId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetTopology"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Topology.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetTopology"))
+              .build();
+        }
+      }
+    }
+    return getSetTopologyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Empty> getRemoveTopologyMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveTopology",
+      requestType = context.ContextOuterClass.TopologyId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId,
+      context.ContextOuterClass.Empty> getRemoveTopologyMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty> getRemoveTopologyMethod;
+    if ((getRemoveTopologyMethod = ContextServiceGrpc.getRemoveTopologyMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveTopologyMethod = ContextServiceGrpc.getRemoveTopologyMethod) == null) {
+          ContextServiceGrpc.getRemoveTopologyMethod = getRemoveTopologyMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.TopologyId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveTopology"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveTopology"))
+              .build();
+        }
+      }
+    }
+    return getRemoveTopologyMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.TopologyEvent> getGetTopologyEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetTopologyEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.TopologyEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.TopologyEvent> getGetTopologyEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent> getGetTopologyEventsMethod;
+    if ((getGetTopologyEventsMethod = ContextServiceGrpc.getGetTopologyEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetTopologyEventsMethod = ContextServiceGrpc.getGetTopologyEventsMethod) == null) {
+          ContextServiceGrpc.getGetTopologyEventsMethod = getGetTopologyEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.TopologyEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetTopologyEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.TopologyEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetTopologyEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetTopologyEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceIdList> getListDeviceIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListDeviceIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.DeviceIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceIdList> getListDeviceIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList> getListDeviceIdsMethod;
+    if ((getListDeviceIdsMethod = ContextServiceGrpc.getListDeviceIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListDeviceIdsMethod = ContextServiceGrpc.getListDeviceIdsMethod) == null) {
+          ContextServiceGrpc.getListDeviceIdsMethod = getListDeviceIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListDeviceIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListDeviceIds"))
+              .build();
+        }
+      }
+    }
+    return getListDeviceIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceList> getListDevicesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListDevices",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.DeviceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceList> getListDevicesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList> getListDevicesMethod;
+    if ((getListDevicesMethod = ContextServiceGrpc.getListDevicesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListDevicesMethod = ContextServiceGrpc.getListDevicesMethod) == null) {
+          ContextServiceGrpc.getListDevicesMethod = getListDevicesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListDevices"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListDevices"))
+              .build();
+        }
+      }
+    }
+    return getListDevicesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Device> getGetDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetDevice",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = context.ContextOuterClass.Device.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Device> getGetDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device> getGetDeviceMethod;
+    if ((getGetDeviceMethod = ContextServiceGrpc.getGetDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetDeviceMethod = ContextServiceGrpc.getGetDeviceMethod) == null) {
+          ContextServiceGrpc.getGetDeviceMethod = getGetDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Device>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Device.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetDevice"))
+              .build();
+        }
+      }
+    }
+    return getGetDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getSetDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetDevice",
+      requestType = context.ContextOuterClass.Device.class,
+      responseType = context.ContextOuterClass.DeviceId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getSetDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId> getSetDeviceMethod;
+    if ((getSetDeviceMethod = ContextServiceGrpc.getSetDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetDeviceMethod = ContextServiceGrpc.getSetDeviceMethod) == null) {
+          ContextServiceGrpc.getSetDeviceMethod = getSetDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Device.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetDevice"))
+              .build();
+        }
+      }
+    }
+    return getSetDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Empty> getRemoveDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveDevice",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Empty> getRemoveDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty> getRemoveDeviceMethod;
+    if ((getRemoveDeviceMethod = ContextServiceGrpc.getRemoveDeviceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveDeviceMethod = ContextServiceGrpc.getRemoveDeviceMethod) == null) {
+          ContextServiceGrpc.getRemoveDeviceMethod = getRemoveDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveDevice"))
+              .build();
+        }
+      }
+    }
+    return getRemoveDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceEvent> getGetDeviceEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetDeviceEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.DeviceEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.DeviceEvent> getGetDeviceEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent> getGetDeviceEventsMethod;
+    if ((getGetDeviceEventsMethod = ContextServiceGrpc.getGetDeviceEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetDeviceEventsMethod = ContextServiceGrpc.getGetDeviceEventsMethod) == null) {
+          ContextServiceGrpc.getGetDeviceEventsMethod = getGetDeviceEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.DeviceEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetDeviceEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetDeviceEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetDeviceEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkIdList> getListLinkIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListLinkIds",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.LinkIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkIdList> getListLinkIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList> getListLinkIdsMethod;
+    if ((getListLinkIdsMethod = ContextServiceGrpc.getListLinkIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListLinkIdsMethod = ContextServiceGrpc.getListLinkIdsMethod) == null) {
+          ContextServiceGrpc.getListLinkIdsMethod = getListLinkIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListLinkIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListLinkIds"))
+              .build();
+        }
+      }
+    }
+    return getListLinkIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkList> getListLinksMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListLinks",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.LinkList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkList> getListLinksMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList> getListLinksMethod;
+    if ((getListLinksMethod = ContextServiceGrpc.getListLinksMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListLinksMethod = ContextServiceGrpc.getListLinksMethod) == null) {
+          ContextServiceGrpc.getListLinksMethod = getListLinksMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListLinks"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListLinks"))
+              .build();
+        }
+      }
+    }
+    return getListLinksMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Link> getGetLinkMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetLink",
+      requestType = context.ContextOuterClass.LinkId.class,
+      responseType = context.ContextOuterClass.Link.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Link> getGetLinkMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link> getGetLinkMethod;
+    if ((getGetLinkMethod = ContextServiceGrpc.getGetLinkMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetLinkMethod = ContextServiceGrpc.getGetLinkMethod) == null) {
+          ContextServiceGrpc.getGetLinkMethod = getGetLinkMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.Link>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetLink"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Link.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetLink"))
+              .build();
+        }
+      }
+    }
+    return getGetLinkMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Link,
+      context.ContextOuterClass.LinkId> getSetLinkMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetLink",
+      requestType = context.ContextOuterClass.Link.class,
+      responseType = context.ContextOuterClass.LinkId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Link,
+      context.ContextOuterClass.LinkId> getSetLinkMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId> getSetLinkMethod;
+    if ((getSetLinkMethod = ContextServiceGrpc.getSetLinkMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetLinkMethod = ContextServiceGrpc.getSetLinkMethod) == null) {
+          ContextServiceGrpc.getSetLinkMethod = getSetLinkMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Link, context.ContextOuterClass.LinkId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetLink"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Link.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetLink"))
+              .build();
+        }
+      }
+    }
+    return getSetLinkMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Empty> getRemoveLinkMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveLink",
+      requestType = context.ContextOuterClass.LinkId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId,
+      context.ContextOuterClass.Empty> getRemoveLinkMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty> getRemoveLinkMethod;
+    if ((getRemoveLinkMethod = ContextServiceGrpc.getRemoveLinkMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveLinkMethod = ContextServiceGrpc.getRemoveLinkMethod) == null) {
+          ContextServiceGrpc.getRemoveLinkMethod = getRemoveLinkMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.LinkId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveLink"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveLink"))
+              .build();
+        }
+      }
+    }
+    return getRemoveLinkMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkEvent> getGetLinkEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetLinkEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.LinkEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.LinkEvent> getGetLinkEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent> getGetLinkEventsMethod;
+    if ((getGetLinkEventsMethod = ContextServiceGrpc.getGetLinkEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetLinkEventsMethod = ContextServiceGrpc.getGetLinkEventsMethod) == null) {
+          ContextServiceGrpc.getGetLinkEventsMethod = getGetLinkEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.LinkEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetLinkEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.LinkEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetLinkEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetLinkEventsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceIdList> getListServiceIdsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListServiceIds",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.ServiceIdList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceIdList> getListServiceIdsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList> getListServiceIdsMethod;
+    if ((getListServiceIdsMethod = ContextServiceGrpc.getListServiceIdsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListServiceIdsMethod = ContextServiceGrpc.getListServiceIdsMethod) == null) {
+          ContextServiceGrpc.getListServiceIdsMethod = getListServiceIdsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceIdList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListServiceIds"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceIdList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListServiceIds"))
+              .build();
+        }
+      }
+    }
+    return getListServiceIdsMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceList> getListServicesMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ListServices",
+      requestType = context.ContextOuterClass.ContextId.class,
+      responseType = context.ContextOuterClass.ServiceList.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId,
+      context.ContextOuterClass.ServiceList> getListServicesMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList> getListServicesMethod;
+    if ((getListServicesMethod = ContextServiceGrpc.getListServicesMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getListServicesMethod = ContextServiceGrpc.getListServicesMethod) == null) {
+          ContextServiceGrpc.getListServicesMethod = getListServicesMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ContextId, context.ContextOuterClass.ServiceList>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ListServices"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ContextId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceList.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("ListServices"))
+              .build();
+        }
+      }
+    }
+    return getListServicesMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Service> getGetServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetService",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = context.ContextOuterClass.Service.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Service> getGetServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service> getGetServiceMethod;
+    if ((getGetServiceMethod = ContextServiceGrpc.getGetServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetServiceMethod = ContextServiceGrpc.getGetServiceMethod) == null) {
+          ContextServiceGrpc.getGetServiceMethod = getGetServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Service>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Service.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetService"))
+              .build();
+        }
+      }
+    }
+    return getGetServiceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Service,
+      context.ContextOuterClass.ServiceId> getSetServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "SetService",
+      requestType = context.ContextOuterClass.Service.class,
+      responseType = context.ContextOuterClass.ServiceId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Service,
+      context.ContextOuterClass.ServiceId> getSetServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId> getSetServiceMethod;
+    if ((getSetServiceMethod = ContextServiceGrpc.getSetServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getSetServiceMethod = ContextServiceGrpc.getSetServiceMethod) == null) {
+          ContextServiceGrpc.getSetServiceMethod = getSetServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Service, context.ContextOuterClass.ServiceId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "SetService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Service.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("SetService"))
+              .build();
+        }
+      }
+    }
+    return getSetServiceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Empty> getRemoveServiceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RemoveService",
+      requestType = context.ContextOuterClass.ServiceId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId,
+      context.ContextOuterClass.Empty> getRemoveServiceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty> getRemoveServiceMethod;
+    if ((getRemoveServiceMethod = ContextServiceGrpc.getRemoveServiceMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getRemoveServiceMethod = ContextServiceGrpc.getRemoveServiceMethod) == null) {
+          ContextServiceGrpc.getRemoveServiceMethod = getRemoveServiceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.ServiceId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RemoveService"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("RemoveService"))
+              .build();
+        }
+      }
+    }
+    return getRemoveServiceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ServiceEvent> getGetServiceEventsMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetServiceEvents",
+      requestType = context.ContextOuterClass.Empty.class,
+      responseType = context.ContextOuterClass.ServiceEvent.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Empty,
+      context.ContextOuterClass.ServiceEvent> getGetServiceEventsMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent> getGetServiceEventsMethod;
+    if ((getGetServiceEventsMethod = ContextServiceGrpc.getGetServiceEventsMethod) == null) {
+      synchronized (ContextServiceGrpc.class) {
+        if ((getGetServiceEventsMethod = ContextServiceGrpc.getGetServiceEventsMethod) == null) {
+          ContextServiceGrpc.getGetServiceEventsMethod = getGetServiceEventsMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Empty, context.ContextOuterClass.ServiceEvent>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.SERVER_STREAMING)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetServiceEvents"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.ServiceEvent.getDefaultInstance()))
+              .setSchemaDescriptor(new ContextServiceMethodDescriptorSupplier("GetServiceEvents"))
+              .build();
+        }
+      }
+    }
+    return getGetServiceEventsMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static ContextServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextServiceStub>() {
+        @java.lang.Override
+        public ContextServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextServiceStub(channel, callOptions);
+        }
+      };
+    return ContextServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static ContextServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextServiceBlockingStub>() {
+        @java.lang.Override
+        public ContextServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return ContextServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static ContextServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<ContextServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<ContextServiceFutureStub>() {
+        @java.lang.Override
+        public ContextServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new ContextServiceFutureStub(channel, callOptions);
+        }
+      };
+    return ContextServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   */
+  public static abstract class ContextServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void listContextIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListContextIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listContexts(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListContextsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Context> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetContextMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setContext(context.ContextOuterClass.Context request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetContextMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveContextMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getContextEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetContextEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologyIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListTopologyIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologies(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListTopologiesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setTopology(context.ContextOuterClass.Topology request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetTopologyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveTopologyMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getTopologyEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetTopologyEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listDeviceIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListDeviceIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listDevices(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListDevicesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Device> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getDeviceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetDeviceEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listLinkIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListLinkIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listLinks(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListLinksMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Link> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetLinkMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setLink(context.ContextOuterClass.Link request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetLinkMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveLinkMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getLinkEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetLinkEventsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listServiceIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListServiceIdsMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void listServices(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getListServicesMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Service> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void setService(context.ContextOuterClass.Service request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSetServiceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void removeService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getRemoveServiceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getServiceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetServiceEventsMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getListContextIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ContextIdList>(
+                  this, METHODID_LIST_CONTEXT_IDS)))
+          .addMethod(
+            getListContextsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ContextList>(
+                  this, METHODID_LIST_CONTEXTS)))
+          .addMethod(
+            getGetContextMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.Context>(
+                  this, METHODID_GET_CONTEXT)))
+          .addMethod(
+            getSetContextMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Context,
+                context.ContextOuterClass.ContextId>(
+                  this, METHODID_SET_CONTEXT)))
+          .addMethod(
+            getRemoveContextMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_CONTEXT)))
+          .addMethod(
+            getGetContextEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ContextEvent>(
+                  this, METHODID_GET_CONTEXT_EVENTS)))
+          .addMethod(
+            getListTopologyIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.TopologyIdList>(
+                  this, METHODID_LIST_TOPOLOGY_IDS)))
+          .addMethod(
+            getListTopologiesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.TopologyList>(
+                  this, METHODID_LIST_TOPOLOGIES)))
+          .addMethod(
+            getGetTopologyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.TopologyId,
+                context.ContextOuterClass.Topology>(
+                  this, METHODID_GET_TOPOLOGY)))
+          .addMethod(
+            getSetTopologyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Topology,
+                context.ContextOuterClass.TopologyId>(
+                  this, METHODID_SET_TOPOLOGY)))
+          .addMethod(
+            getRemoveTopologyMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.TopologyId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_TOPOLOGY)))
+          .addMethod(
+            getGetTopologyEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.TopologyEvent>(
+                  this, METHODID_GET_TOPOLOGY_EVENTS)))
+          .addMethod(
+            getListDeviceIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.DeviceIdList>(
+                  this, METHODID_LIST_DEVICE_IDS)))
+          .addMethod(
+            getListDevicesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.DeviceList>(
+                  this, METHODID_LIST_DEVICES)))
+          .addMethod(
+            getGetDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                context.ContextOuterClass.Device>(
+                  this, METHODID_GET_DEVICE)))
+          .addMethod(
+            getSetDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Device,
+                context.ContextOuterClass.DeviceId>(
+                  this, METHODID_SET_DEVICE)))
+          .addMethod(
+            getRemoveDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_DEVICE)))
+          .addMethod(
+            getGetDeviceEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.DeviceEvent>(
+                  this, METHODID_GET_DEVICE_EVENTS)))
+          .addMethod(
+            getListLinkIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.LinkIdList>(
+                  this, METHODID_LIST_LINK_IDS)))
+          .addMethod(
+            getListLinksMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.LinkList>(
+                  this, METHODID_LIST_LINKS)))
+          .addMethod(
+            getGetLinkMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.LinkId,
+                context.ContextOuterClass.Link>(
+                  this, METHODID_GET_LINK)))
+          .addMethod(
+            getSetLinkMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Link,
+                context.ContextOuterClass.LinkId>(
+                  this, METHODID_SET_LINK)))
+          .addMethod(
+            getRemoveLinkMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.LinkId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_LINK)))
+          .addMethod(
+            getGetLinkEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.LinkEvent>(
+                  this, METHODID_GET_LINK_EVENTS)))
+          .addMethod(
+            getListServiceIdsMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.ServiceIdList>(
+                  this, METHODID_LIST_SERVICE_IDS)))
+          .addMethod(
+            getListServicesMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ContextId,
+                context.ContextOuterClass.ServiceList>(
+                  this, METHODID_LIST_SERVICES)))
+          .addMethod(
+            getGetServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                context.ContextOuterClass.Service>(
+                  this, METHODID_GET_SERVICE)))
+          .addMethod(
+            getSetServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Service,
+                context.ContextOuterClass.ServiceId>(
+                  this, METHODID_SET_SERVICE)))
+          .addMethod(
+            getRemoveServiceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.ServiceId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_REMOVE_SERVICE)))
+          .addMethod(
+            getGetServiceEventsMethod(),
+            io.grpc.stub.ServerCalls.asyncServerStreamingCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Empty,
+                context.ContextOuterClass.ServiceEvent>(
+                  this, METHODID_GET_SERVICE_EVENTS)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class ContextServiceStub extends io.grpc.stub.AbstractAsyncStub<ContextServiceStub> {
+    private ContextServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void listContextIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListContextIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listContexts(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListContextsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Context> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetContextMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setContext(context.ContextOuterClass.Context request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetContextMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeContext(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveContextMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getContextEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetContextEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologyIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListTopologyIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listTopologies(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListTopologiesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetTopologyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setTopology(context.ContextOuterClass.Topology request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetTopologyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeTopology(context.ContextOuterClass.TopologyId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveTopologyMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getTopologyEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetTopologyEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listDeviceIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListDeviceIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listDevices(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListDevicesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Device> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getDeviceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetDeviceEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listLinkIds(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListLinkIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listLinks(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListLinksMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Link> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetLinkMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setLink(context.ContextOuterClass.Link request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetLinkMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeLink(context.ContextOuterClass.LinkId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveLinkMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getLinkEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetLinkEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listServiceIds(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListServiceIdsMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void listServices(context.ContextOuterClass.ContextId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getListServicesMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Service> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void setService(context.ContextOuterClass.Service request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getSetServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void removeService(context.ContextOuterClass.ServiceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getRemoveServiceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getServiceEvents(context.ContextOuterClass.Empty request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncServerStreamingCall(
+          getChannel().newCall(getGetServiceEventsMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class ContextServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<ContextServiceBlockingStub> {
+    private ContextServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ContextIdList listContextIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListContextIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ContextList listContexts(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListContextsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Context getContext(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetContextMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ContextId setContext(context.ContextOuterClass.Context request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetContextMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeContext(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveContextMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.ContextEvent> getContextEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetContextEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.TopologyIdList listTopologyIds(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListTopologyIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.TopologyList listTopologies(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListTopologiesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Topology getTopology(context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetTopologyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.TopologyId setTopology(context.ContextOuterClass.Topology request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetTopologyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeTopology(context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveTopologyMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.TopologyEvent> getTopologyEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetTopologyEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceIdList listDeviceIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListDeviceIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceList listDevices(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListDevicesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Device getDevice(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceId setDevice(context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeDevice(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.DeviceEvent> getDeviceEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetDeviceEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.LinkIdList listLinkIds(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListLinkIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.LinkList listLinks(context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListLinksMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Link getLink(context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetLinkMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.LinkId setLink(context.ContextOuterClass.Link request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetLinkMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeLink(context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveLinkMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.LinkEvent> getLinkEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetLinkEventsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ServiceIdList listServiceIds(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListServiceIdsMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ServiceList listServices(context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getListServicesMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Service getService(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetServiceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.ServiceId setService(context.ContextOuterClass.Service request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getSetServiceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty removeService(context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getRemoveServiceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public java.util.Iterator<context.ContextOuterClass.ServiceEvent> getServiceEvents(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.blockingServerStreamingCall(
+          getChannel(), getGetServiceEventsMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class ContextServiceFutureStub extends io.grpc.stub.AbstractFutureStub<ContextServiceFutureStub> {
+    private ContextServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected ContextServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new ContextServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ContextIdList> listContextIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListContextIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ContextList> listContexts(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListContextsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Context> getContext(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetContextMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ContextId> setContext(
+        context.ContextOuterClass.Context request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetContextMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeContext(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveContextMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyIdList> listTopologyIds(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListTopologyIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyList> listTopologies(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListTopologiesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Topology> getTopology(
+        context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetTopologyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.TopologyId> setTopology(
+        context.ContextOuterClass.Topology request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetTopologyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeTopology(
+        context.ContextOuterClass.TopologyId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveTopologyMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceIdList> listDeviceIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListDeviceIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceList> listDevices(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListDevicesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Device> getDevice(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceId> setDevice(
+        context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeDevice(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkIdList> listLinkIds(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListLinkIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkList> listLinks(
+        context.ContextOuterClass.Empty request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListLinksMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Link> getLink(
+        context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetLinkMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.LinkId> setLink(
+        context.ContextOuterClass.Link request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetLinkMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeLink(
+        context.ContextOuterClass.LinkId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveLinkMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceIdList> listServiceIds(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListServiceIdsMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceList> listServices(
+        context.ContextOuterClass.ContextId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getListServicesMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Service> getService(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetServiceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.ServiceId> setService(
+        context.ContextOuterClass.Service request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getSetServiceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> removeService(
+        context.ContextOuterClass.ServiceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getRemoveServiceMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_LIST_CONTEXT_IDS = 0;
+  private static final int METHODID_LIST_CONTEXTS = 1;
+  private static final int METHODID_GET_CONTEXT = 2;
+  private static final int METHODID_SET_CONTEXT = 3;
+  private static final int METHODID_REMOVE_CONTEXT = 4;
+  private static final int METHODID_GET_CONTEXT_EVENTS = 5;
+  private static final int METHODID_LIST_TOPOLOGY_IDS = 6;
+  private static final int METHODID_LIST_TOPOLOGIES = 7;
+  private static final int METHODID_GET_TOPOLOGY = 8;
+  private static final int METHODID_SET_TOPOLOGY = 9;
+  private static final int METHODID_REMOVE_TOPOLOGY = 10;
+  private static final int METHODID_GET_TOPOLOGY_EVENTS = 11;
+  private static final int METHODID_LIST_DEVICE_IDS = 12;
+  private static final int METHODID_LIST_DEVICES = 13;
+  private static final int METHODID_GET_DEVICE = 14;
+  private static final int METHODID_SET_DEVICE = 15;
+  private static final int METHODID_REMOVE_DEVICE = 16;
+  private static final int METHODID_GET_DEVICE_EVENTS = 17;
+  private static final int METHODID_LIST_LINK_IDS = 18;
+  private static final int METHODID_LIST_LINKS = 19;
+  private static final int METHODID_GET_LINK = 20;
+  private static final int METHODID_SET_LINK = 21;
+  private static final int METHODID_REMOVE_LINK = 22;
+  private static final int METHODID_GET_LINK_EVENTS = 23;
+  private static final int METHODID_LIST_SERVICE_IDS = 24;
+  private static final int METHODID_LIST_SERVICES = 25;
+  private static final int METHODID_GET_SERVICE = 26;
+  private static final int METHODID_SET_SERVICE = 27;
+  private static final int METHODID_REMOVE_SERVICE = 28;
+  private static final int METHODID_GET_SERVICE_EVENTS = 29;
+
+  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 ContextServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(ContextServiceImplBase 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_CONTEXT_IDS:
+          serviceImpl.listContextIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList>) responseObserver);
+          break;
+        case METHODID_LIST_CONTEXTS:
+          serviceImpl.listContexts((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList>) responseObserver);
+          break;
+        case METHODID_GET_CONTEXT:
+          serviceImpl.getContext((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Context>) responseObserver);
+          break;
+        case METHODID_SET_CONTEXT:
+          serviceImpl.setContext((context.ContextOuterClass.Context) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId>) responseObserver);
+          break;
+        case METHODID_REMOVE_CONTEXT:
+          serviceImpl.removeContext((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_CONTEXT_EVENTS:
+          serviceImpl.getContextEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent>) responseObserver);
+          break;
+        case METHODID_LIST_TOPOLOGY_IDS:
+          serviceImpl.listTopologyIds((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList>) responseObserver);
+          break;
+        case METHODID_LIST_TOPOLOGIES:
+          serviceImpl.listTopologies((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList>) responseObserver);
+          break;
+        case METHODID_GET_TOPOLOGY:
+          serviceImpl.getTopology((context.ContextOuterClass.TopologyId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology>) responseObserver);
+          break;
+        case METHODID_SET_TOPOLOGY:
+          serviceImpl.setTopology((context.ContextOuterClass.Topology) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId>) responseObserver);
+          break;
+        case METHODID_REMOVE_TOPOLOGY:
+          serviceImpl.removeTopology((context.ContextOuterClass.TopologyId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_TOPOLOGY_EVENTS:
+          serviceImpl.getTopologyEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent>) responseObserver);
+          break;
+        case METHODID_LIST_DEVICE_IDS:
+          serviceImpl.listDeviceIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList>) responseObserver);
+          break;
+        case METHODID_LIST_DEVICES:
+          serviceImpl.listDevices((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList>) responseObserver);
+          break;
+        case METHODID_GET_DEVICE:
+          serviceImpl.getDevice((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Device>) responseObserver);
+          break;
+        case METHODID_SET_DEVICE:
+          serviceImpl.setDevice((context.ContextOuterClass.Device) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver);
+          break;
+        case METHODID_REMOVE_DEVICE:
+          serviceImpl.removeDevice((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_DEVICE_EVENTS:
+          serviceImpl.getDeviceEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent>) responseObserver);
+          break;
+        case METHODID_LIST_LINK_IDS:
+          serviceImpl.listLinkIds((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList>) responseObserver);
+          break;
+        case METHODID_LIST_LINKS:
+          serviceImpl.listLinks((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList>) responseObserver);
+          break;
+        case METHODID_GET_LINK:
+          serviceImpl.getLink((context.ContextOuterClass.LinkId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Link>) responseObserver);
+          break;
+        case METHODID_SET_LINK:
+          serviceImpl.setLink((context.ContextOuterClass.Link) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId>) responseObserver);
+          break;
+        case METHODID_REMOVE_LINK:
+          serviceImpl.removeLink((context.ContextOuterClass.LinkId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_LINK_EVENTS:
+          serviceImpl.getLinkEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent>) responseObserver);
+          break;
+        case METHODID_LIST_SERVICE_IDS:
+          serviceImpl.listServiceIds((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList>) responseObserver);
+          break;
+        case METHODID_LIST_SERVICES:
+          serviceImpl.listServices((context.ContextOuterClass.ContextId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList>) responseObserver);
+          break;
+        case METHODID_GET_SERVICE:
+          serviceImpl.getService((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Service>) responseObserver);
+          break;
+        case METHODID_SET_SERVICE:
+          serviceImpl.setService((context.ContextOuterClass.Service) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId>) responseObserver);
+          break;
+        case METHODID_REMOVE_SERVICE:
+          serviceImpl.removeService((context.ContextOuterClass.ServiceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_SERVICE_EVENTS:
+          serviceImpl.getServiceEvents((context.ContextOuterClass.Empty) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent>) 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 ContextServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    ContextServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return context.ContextOuterClass.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("ContextService");
+    }
+  }
+
+  private static final class ContextServiceFileDescriptorSupplier
+      extends ContextServiceBaseDescriptorSupplier {
+    ContextServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class ContextServiceMethodDescriptorSupplier
+      extends ContextServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    ContextServiceMethodDescriptorSupplier(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 (ContextServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new ContextServiceFileDescriptorSupplier())
+              .addMethod(getListContextIdsMethod())
+              .addMethod(getListContextsMethod())
+              .addMethod(getGetContextMethod())
+              .addMethod(getSetContextMethod())
+              .addMethod(getRemoveContextMethod())
+              .addMethod(getGetContextEventsMethod())
+              .addMethod(getListTopologyIdsMethod())
+              .addMethod(getListTopologiesMethod())
+              .addMethod(getGetTopologyMethod())
+              .addMethod(getSetTopologyMethod())
+              .addMethod(getRemoveTopologyMethod())
+              .addMethod(getGetTopologyEventsMethod())
+              .addMethod(getListDeviceIdsMethod())
+              .addMethod(getListDevicesMethod())
+              .addMethod(getGetDeviceMethod())
+              .addMethod(getSetDeviceMethod())
+              .addMethod(getRemoveDeviceMethod())
+              .addMethod(getGetDeviceEventsMethod())
+              .addMethod(getListLinkIdsMethod())
+              .addMethod(getListLinksMethod())
+              .addMethod(getGetLinkMethod())
+              .addMethod(getSetLinkMethod())
+              .addMethod(getRemoveLinkMethod())
+              .addMethod(getGetLinkEventsMethod())
+              .addMethod(getListServiceIdsMethod())
+              .addMethod(getListServicesMethod())
+              .addMethod(getGetServiceMethod())
+              .addMethod(getSetServiceMethod())
+              .addMethod(getRemoveServiceMethod())
+              .addMethod(getGetServiceEventsMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java b/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..7642fdfd5c6d203fe0e0b042ca06448477b05bad
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/context/MutinyContextServiceGrpc.java
@@ -0,0 +1,816 @@
+package context;
+
+import static context.ContextServiceGrpc.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.proto")
+public final class MutinyContextServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyContextServiceGrpc() {}
+
+    public static MutinyContextServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyContextServiceStub(channel);
+    }
+
+    
+    public static final class MutinyContextServiceStub extends io.grpc.stub.AbstractStub<MutinyContextServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private ContextServiceGrpc.ContextServiceStub delegateStub;
+
+        private MutinyContextServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = ContextServiceGrpc.newStub(channel);
+        }
+
+        private MutinyContextServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = ContextServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyContextServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyContextServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listContextIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listContexts);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getContext);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setContext);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeContext);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listTopologyIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listTopologies);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getTopology);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setTopology);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeTopology);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listDeviceIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listDevices);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listLinkIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listLinks);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getLink);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setLink);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeLink);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listServiceIds);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::listServices);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getService);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::setService);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::removeService);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getContextEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getTopologyEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getDeviceEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getLinkEvents);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToMany(request, delegateStub::getServiceEvents);
+        }
+
+    }
+
+    
+    public static abstract class ContextServiceImplBase 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 ContextServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextIdList> listContextIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextList> listContexts(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Context> getContext(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ContextId> setContext(context.ContextOuterClass.Context request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeContext(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyIdList> listTopologyIds(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyList> listTopologies(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Topology> getTopology(context.ContextOuterClass.TopologyId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.TopologyId> setTopology(context.ContextOuterClass.Topology request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeTopology(context.ContextOuterClass.TopologyId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceIdList> listDeviceIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceList> listDevices(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Device> getDevice(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> setDevice(context.ContextOuterClass.Device request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeDevice(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkIdList> listLinkIds(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkList> listLinks(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Link> getLink(context.ContextOuterClass.LinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.LinkId> setLink(context.ContextOuterClass.Link request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeLink(context.ContextOuterClass.LinkId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceIdList> listServiceIds(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceList> listServices(context.ContextOuterClass.ContextId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Service> getService(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.ServiceId> setService(context.ContextOuterClass.Service request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> removeService(context.ContextOuterClass.ServiceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ContextEvent> getContextEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.TopologyEvent> getTopologyEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.DeviceEvent> getDeviceEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.LinkEvent> getLinkEvents(context.ContextOuterClass.Empty request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Multi<context.ContextOuterClass.ServiceEvent> getServiceEvents(context.ContextOuterClass.Empty 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.ContextServiceGrpc.getListContextIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ContextIdList>(
+                                            this, METHODID_LIST_CONTEXT_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListContextsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ContextList>(
+                                            this, METHODID_LIST_CONTEXTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetContextMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.Context>(
+                                            this, METHODID_GET_CONTEXT, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetContextMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Context,
+                                            context.ContextOuterClass.ContextId>(
+                                            this, METHODID_SET_CONTEXT, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveContextMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_CONTEXT, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetContextEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ContextEvent>(
+                                            this, METHODID_GET_CONTEXT_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListTopologyIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.TopologyIdList>(
+                                            this, METHODID_LIST_TOPOLOGY_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListTopologiesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.TopologyList>(
+                                            this, METHODID_LIST_TOPOLOGIES, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetTopologyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.TopologyId,
+                                            context.ContextOuterClass.Topology>(
+                                            this, METHODID_GET_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetTopologyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Topology,
+                                            context.ContextOuterClass.TopologyId>(
+                                            this, METHODID_SET_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveTopologyMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.TopologyId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_TOPOLOGY, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetTopologyEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.TopologyEvent>(
+                                            this, METHODID_GET_TOPOLOGY_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListDeviceIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.DeviceIdList>(
+                                            this, METHODID_LIST_DEVICE_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListDevicesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.DeviceList>(
+                                            this, METHODID_LIST_DEVICES, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            context.ContextOuterClass.Device>(
+                                            this, METHODID_GET_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Device,
+                                            context.ContextOuterClass.DeviceId>(
+                                            this, METHODID_SET_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_DEVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetDeviceEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.DeviceEvent>(
+                                            this, METHODID_GET_DEVICE_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListLinkIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.LinkIdList>(
+                                            this, METHODID_LIST_LINK_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListLinksMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.LinkList>(
+                                            this, METHODID_LIST_LINKS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetLinkMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.LinkId,
+                                            context.ContextOuterClass.Link>(
+                                            this, METHODID_GET_LINK, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetLinkMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Link,
+                                            context.ContextOuterClass.LinkId>(
+                                            this, METHODID_SET_LINK, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveLinkMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.LinkId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_LINK, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetLinkEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.LinkEvent>(
+                                            this, METHODID_GET_LINK_EVENTS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListServiceIdsMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.ServiceIdList>(
+                                            this, METHODID_LIST_SERVICE_IDS, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getListServicesMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ContextId,
+                                            context.ContextOuterClass.ServiceList>(
+                                            this, METHODID_LIST_SERVICES, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            context.ContextOuterClass.Service>(
+                                            this, METHODID_GET_SERVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getSetServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Service,
+                                            context.ContextOuterClass.ServiceId>(
+                                            this, METHODID_SET_SERVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getRemoveServiceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.ServiceId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_REMOVE_SERVICE, compression)))
+                    .addMethod(
+                            context.ContextServiceGrpc.getGetServiceEventsMethod(),
+                            asyncServerStreamingCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Empty,
+                                            context.ContextOuterClass.ServiceEvent>(
+                                            this, METHODID_GET_SERVICE_EVENTS, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_LIST_CONTEXT_IDS = 0;
+    private static final int METHODID_LIST_CONTEXTS = 1;
+    private static final int METHODID_GET_CONTEXT = 2;
+    private static final int METHODID_SET_CONTEXT = 3;
+    private static final int METHODID_REMOVE_CONTEXT = 4;
+    private static final int METHODID_GET_CONTEXT_EVENTS = 5;
+    private static final int METHODID_LIST_TOPOLOGY_IDS = 6;
+    private static final int METHODID_LIST_TOPOLOGIES = 7;
+    private static final int METHODID_GET_TOPOLOGY = 8;
+    private static final int METHODID_SET_TOPOLOGY = 9;
+    private static final int METHODID_REMOVE_TOPOLOGY = 10;
+    private static final int METHODID_GET_TOPOLOGY_EVENTS = 11;
+    private static final int METHODID_LIST_DEVICE_IDS = 12;
+    private static final int METHODID_LIST_DEVICES = 13;
+    private static final int METHODID_GET_DEVICE = 14;
+    private static final int METHODID_SET_DEVICE = 15;
+    private static final int METHODID_REMOVE_DEVICE = 16;
+    private static final int METHODID_GET_DEVICE_EVENTS = 17;
+    private static final int METHODID_LIST_LINK_IDS = 18;
+    private static final int METHODID_LIST_LINKS = 19;
+    private static final int METHODID_GET_LINK = 20;
+    private static final int METHODID_SET_LINK = 21;
+    private static final int METHODID_REMOVE_LINK = 22;
+    private static final int METHODID_GET_LINK_EVENTS = 23;
+    private static final int METHODID_LIST_SERVICE_IDS = 24;
+    private static final int METHODID_LIST_SERVICES = 25;
+    private static final int METHODID_GET_SERVICE = 26;
+    private static final int METHODID_SET_SERVICE = 27;
+    private static final int METHODID_REMOVE_SERVICE = 28;
+    private static final int METHODID_GET_SERVICE_EVENTS = 29;
+
+    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 ContextServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(ContextServiceImplBase 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_CONTEXT_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listContextIds);
+                    break;
+                case METHODID_LIST_CONTEXTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextList>) responseObserver,
+                            compression,
+                            serviceImpl::listContexts);
+                    break;
+                case METHODID_GET_CONTEXT:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Context>) responseObserver,
+                            compression,
+                            serviceImpl::getContext);
+                    break;
+                case METHODID_SET_CONTEXT:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Context) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextId>) responseObserver,
+                            compression,
+                            serviceImpl::setContext);
+                    break;
+                case METHODID_REMOVE_CONTEXT:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeContext);
+                    break;
+                case METHODID_GET_CONTEXT_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ContextEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getContextEvents);
+                    break;
+                case METHODID_LIST_TOPOLOGY_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listTopologyIds);
+                    break;
+                case METHODID_LIST_TOPOLOGIES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyList>) responseObserver,
+                            compression,
+                            serviceImpl::listTopologies);
+                    break;
+                case METHODID_GET_TOPOLOGY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.TopologyId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Topology>) responseObserver,
+                            compression,
+                            serviceImpl::getTopology);
+                    break;
+                case METHODID_SET_TOPOLOGY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Topology) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyId>) responseObserver,
+                            compression,
+                            serviceImpl::setTopology);
+                    break;
+                case METHODID_REMOVE_TOPOLOGY:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.TopologyId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeTopology);
+                    break;
+                case METHODID_GET_TOPOLOGY_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.TopologyEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getTopologyEvents);
+                    break;
+                case METHODID_LIST_DEVICE_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listDeviceIds);
+                    break;
+                case METHODID_LIST_DEVICES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceList>) responseObserver,
+                            compression,
+                            serviceImpl::listDevices);
+                    break;
+                case METHODID_GET_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Device>) responseObserver,
+                            compression,
+                            serviceImpl::getDevice);
+                    break;
+                case METHODID_SET_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Device) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver,
+                            compression,
+                            serviceImpl::setDevice);
+                    break;
+                case METHODID_REMOVE_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeDevice);
+                    break;
+                case METHODID_GET_DEVICE_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getDeviceEvents);
+                    break;
+                case METHODID_LIST_LINK_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listLinkIds);
+                    break;
+                case METHODID_LIST_LINKS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkList>) responseObserver,
+                            compression,
+                            serviceImpl::listLinks);
+                    break;
+                case METHODID_GET_LINK:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Link>) responseObserver,
+                            compression,
+                            serviceImpl::getLink);
+                    break;
+                case METHODID_SET_LINK:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Link) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkId>) responseObserver,
+                            compression,
+                            serviceImpl::setLink);
+                    break;
+                case METHODID_REMOVE_LINK:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.LinkId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeLink);
+                    break;
+                case METHODID_GET_LINK_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.LinkEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getLinkEvents);
+                    break;
+                case METHODID_LIST_SERVICE_IDS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceIdList>) responseObserver,
+                            compression,
+                            serviceImpl::listServiceIds);
+                    break;
+                case METHODID_LIST_SERVICES:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ContextId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceList>) responseObserver,
+                            compression,
+                            serviceImpl::listServices);
+                    break;
+                case METHODID_GET_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Service>) responseObserver,
+                            compression,
+                            serviceImpl::getService);
+                    break;
+                case METHODID_SET_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Service) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceId>) responseObserver,
+                            compression,
+                            serviceImpl::setService);
+                    break;
+                case METHODID_REMOVE_SERVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.ServiceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::removeService);
+                    break;
+                case METHODID_GET_SERVICE_EVENTS:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToMany((context.ContextOuterClass.Empty) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.ServiceEvent>) responseObserver,
+                            compression,
+                            serviceImpl::getServiceEvents);
+                    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/automation/target/generated-sources/grpc/device/Device.java b/src/automation/target/generated-sources/grpc/device/Device.java
new file mode 100644
index 0000000000000000000000000000000000000000..460f29a6188215daff9a55c1039ba84c5abf3ecc
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/device/Device.java
@@ -0,0 +1,44 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: device.proto
+
+package device;
+
+public final class Device {
+  private Device() {}
+  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\014device.proto\022\006device\032\rcontext.proto2\360\001" +
+      "\n\rDeviceService\0221\n\tAddDevice\022\017.context.D" +
+      "evice\032\021.context.DeviceId\"\000\0227\n\017ConfigureD" +
+      "evice\022\017.context.Device\032\021.context.DeviceI" +
+      "d\"\000\0223\n\014DeleteDevice\022\021.context.DeviceId\032\016" +
+      ".context.Empty\"\000\022>\n\020GetInitialConfig\022\021.c" +
+      "ontext.DeviceId\032\025.context.DeviceConfig\"\000" +
+      "b\006proto3"
+    };
+    descriptor = com.google.protobuf.Descriptors.FileDescriptor
+      .internalBuildGeneratedFileFrom(descriptorData,
+        new com.google.protobuf.Descriptors.FileDescriptor[] {
+          context.ContextOuterClass.getDescriptor(),
+        });
+    context.ContextOuterClass.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/src/automation/target/generated-sources/grpc/device/DeviceService.java b/src/automation/target/generated-sources/grpc/device/DeviceService.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2d9be46eb44a8e05efab74866f7ff8337934ed3
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/device/DeviceService.java
@@ -0,0 +1,22 @@
+package device;
+
+import io.quarkus.grpc.runtime.MutinyService;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: device.proto")
+public interface DeviceService extends MutinyService {
+
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> addDevice(context.ContextOuterClass.Device request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> configureDevice(context.ContextOuterClass.Device request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteDevice(context.ContextOuterClass.DeviceId request);
+    
+    io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceConfig> getInitialConfig(context.ContextOuterClass.DeviceId request);
+    
+    
+    
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/device/DeviceServiceBean.java b/src/automation/target/generated-sources/grpc/device/DeviceServiceBean.java
new file mode 100644
index 0000000000000000000000000000000000000000..203e2f2b3e1d42e7a848cdcc19f251e484def93f
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/device/DeviceServiceBean.java
@@ -0,0 +1,51 @@
+package device;
+
+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: device.proto")
+public class DeviceServiceBean extends MutinyDeviceServiceGrpc.DeviceServiceImplBase implements BindableService, MutinyBean {
+
+    private final DeviceService delegate;
+
+    DeviceServiceBean(@GrpcService DeviceService delegate) {
+       this.delegate = delegate;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> addDevice(context.ContextOuterClass.Device request) {
+       try {
+         return delegate.addDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> configureDevice(context.ContextOuterClass.Device request) {
+       try {
+         return delegate.configureDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteDevice(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.deleteDevice(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceConfig> getInitialConfig(context.ContextOuterClass.DeviceId request) {
+       try {
+         return delegate.getInitialConfig(request);
+       } catch (UnsupportedOperationException e) {
+          throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+       }
+    }
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/device/DeviceServiceClient.java b/src/automation/target/generated-sources/grpc/device/DeviceServiceClient.java
new file mode 100644
index 0000000000000000000000000000000000000000..e987e6333549200193cf9b6a77f8589b15086718
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/device/DeviceServiceClient.java
@@ -0,0 +1,40 @@
+package device;
+
+import java.util.function.BiFunction;
+
+import io.quarkus.grpc.runtime.MutinyClient;
+
+@javax.annotation.Generated(
+value = "by Mutiny Grpc generator",
+comments = "Source: device.proto")
+public class DeviceServiceClient implements DeviceService, MutinyClient<MutinyDeviceServiceGrpc.MutinyDeviceServiceStub> {
+
+    private final MutinyDeviceServiceGrpc.MutinyDeviceServiceStub stub;
+
+    public DeviceServiceClient(String name, io.grpc.Channel channel, BiFunction<String, MutinyDeviceServiceGrpc.MutinyDeviceServiceStub, MutinyDeviceServiceGrpc.MutinyDeviceServiceStub> stubConfigurator) {
+       this.stub = stubConfigurator.apply(name,MutinyDeviceServiceGrpc.newMutinyStub(channel));
+    }
+
+    @Override
+    public MutinyDeviceServiceGrpc.MutinyDeviceServiceStub getStub() {
+       return stub;
+    }
+
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> addDevice(context.ContextOuterClass.Device request) {
+       return stub.addDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> configureDevice(context.ContextOuterClass.Device request) {
+       return stub.configureDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteDevice(context.ContextOuterClass.DeviceId request) {
+       return stub.deleteDevice(request);
+    }
+    @Override
+    public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceConfig> getInitialConfig(context.ContextOuterClass.DeviceId request) {
+       return stub.getInitialConfig(request);
+    }
+
+}
\ No newline at end of file
diff --git a/src/automation/target/generated-sources/grpc/device/DeviceServiceGrpc.java b/src/automation/target/generated-sources/grpc/device/DeviceServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..c19e45888168c69c1454dfde99af59cf64195851
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/device/DeviceServiceGrpc.java
@@ -0,0 +1,497 @@
+package device;
+
+import static io.grpc.MethodDescriptor.generateFullMethodName;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.38.1)",
+    comments = "Source: device.proto")
+public final class DeviceServiceGrpc {
+
+  private DeviceServiceGrpc() {}
+
+  public static final String SERVICE_NAME = "device.DeviceService";
+
+  // Static method descriptors that strictly reflect the proto.
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getAddDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "AddDevice",
+      requestType = context.ContextOuterClass.Device.class,
+      responseType = context.ContextOuterClass.DeviceId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getAddDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId> getAddDeviceMethod;
+    if ((getAddDeviceMethod = DeviceServiceGrpc.getAddDeviceMethod) == null) {
+      synchronized (DeviceServiceGrpc.class) {
+        if ((getAddDeviceMethod = DeviceServiceGrpc.getAddDeviceMethod) == null) {
+          DeviceServiceGrpc.getAddDeviceMethod = getAddDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "AddDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Device.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("AddDevice"))
+              .build();
+        }
+      }
+    }
+    return getAddDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getConfigureDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "ConfigureDevice",
+      requestType = context.ContextOuterClass.Device.class,
+      responseType = context.ContextOuterClass.DeviceId.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.Device,
+      context.ContextOuterClass.DeviceId> getConfigureDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId> getConfigureDeviceMethod;
+    if ((getConfigureDeviceMethod = DeviceServiceGrpc.getConfigureDeviceMethod) == null) {
+      synchronized (DeviceServiceGrpc.class) {
+        if ((getConfigureDeviceMethod = DeviceServiceGrpc.getConfigureDeviceMethod) == null) {
+          DeviceServiceGrpc.getConfigureDeviceMethod = getConfigureDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.Device, context.ContextOuterClass.DeviceId>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "ConfigureDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Device.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("ConfigureDevice"))
+              .build();
+        }
+      }
+    }
+    return getConfigureDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Empty> getDeleteDeviceMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "DeleteDevice",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = context.ContextOuterClass.Empty.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.Empty> getDeleteDeviceMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty> getDeleteDeviceMethod;
+    if ((getDeleteDeviceMethod = DeviceServiceGrpc.getDeleteDeviceMethod) == null) {
+      synchronized (DeviceServiceGrpc.class) {
+        if ((getDeleteDeviceMethod = DeviceServiceGrpc.getDeleteDeviceMethod) == null) {
+          DeviceServiceGrpc.getDeleteDeviceMethod = getDeleteDeviceMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, context.ContextOuterClass.Empty>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "DeleteDevice"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.Empty.getDefaultInstance()))
+              .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("DeleteDevice"))
+              .build();
+        }
+      }
+    }
+    return getDeleteDeviceMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.DeviceConfig> getGetInitialConfigMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetInitialConfig",
+      requestType = context.ContextOuterClass.DeviceId.class,
+      responseType = context.ContextOuterClass.DeviceConfig.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId,
+      context.ContextOuterClass.DeviceConfig> getGetInitialConfigMethod() {
+    io.grpc.MethodDescriptor<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceConfig> getGetInitialConfigMethod;
+    if ((getGetInitialConfigMethod = DeviceServiceGrpc.getGetInitialConfigMethod) == null) {
+      synchronized (DeviceServiceGrpc.class) {
+        if ((getGetInitialConfigMethod = DeviceServiceGrpc.getGetInitialConfigMethod) == null) {
+          DeviceServiceGrpc.getGetInitialConfigMethod = getGetInitialConfigMethod =
+              io.grpc.MethodDescriptor.<context.ContextOuterClass.DeviceId, context.ContextOuterClass.DeviceConfig>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetInitialConfig"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceId.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  context.ContextOuterClass.DeviceConfig.getDefaultInstance()))
+              .setSchemaDescriptor(new DeviceServiceMethodDescriptorSupplier("GetInitialConfig"))
+              .build();
+        }
+      }
+    }
+    return getGetInitialConfigMethod;
+  }
+
+  /**
+   * Creates a new async stub that supports all call types for the service
+   */
+  public static DeviceServiceStub newStub(io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<DeviceServiceStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<DeviceServiceStub>() {
+        @java.lang.Override
+        public DeviceServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new DeviceServiceStub(channel, callOptions);
+        }
+      };
+    return DeviceServiceStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
+   */
+  public static DeviceServiceBlockingStub newBlockingStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<DeviceServiceBlockingStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<DeviceServiceBlockingStub>() {
+        @java.lang.Override
+        public DeviceServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new DeviceServiceBlockingStub(channel, callOptions);
+        }
+      };
+    return DeviceServiceBlockingStub.newStub(factory, channel);
+  }
+
+  /**
+   * Creates a new ListenableFuture-style stub that supports unary calls on the service
+   */
+  public static DeviceServiceFutureStub newFutureStub(
+      io.grpc.Channel channel) {
+    io.grpc.stub.AbstractStub.StubFactory<DeviceServiceFutureStub> factory =
+      new io.grpc.stub.AbstractStub.StubFactory<DeviceServiceFutureStub>() {
+        @java.lang.Override
+        public DeviceServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+          return new DeviceServiceFutureStub(channel, callOptions);
+        }
+      };
+    return DeviceServiceFutureStub.newStub(factory, channel);
+  }
+
+  /**
+   */
+  public static abstract class DeviceServiceImplBase implements io.grpc.BindableService {
+
+    /**
+     */
+    public void addDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getAddDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void configureDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getConfigureDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void deleteDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getDeleteDeviceMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getInitialConfig(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceConfig> responseObserver) {
+      io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getGetInitialConfigMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getAddDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Device,
+                context.ContextOuterClass.DeviceId>(
+                  this, METHODID_ADD_DEVICE)))
+          .addMethod(
+            getConfigureDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.Device,
+                context.ContextOuterClass.DeviceId>(
+                  this, METHODID_CONFIGURE_DEVICE)))
+          .addMethod(
+            getDeleteDeviceMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                context.ContextOuterClass.Empty>(
+                  this, METHODID_DELETE_DEVICE)))
+          .addMethod(
+            getGetInitialConfigMethod(),
+            io.grpc.stub.ServerCalls.asyncUnaryCall(
+              new MethodHandlers<
+                context.ContextOuterClass.DeviceId,
+                context.ContextOuterClass.DeviceConfig>(
+                  this, METHODID_GET_INITIAL_CONFIG)))
+          .build();
+    }
+  }
+
+  /**
+   */
+  public static final class DeviceServiceStub extends io.grpc.stub.AbstractAsyncStub<DeviceServiceStub> {
+    private DeviceServiceStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected DeviceServiceStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new DeviceServiceStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public void addDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getAddDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void configureDevice(context.ContextOuterClass.Device request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getConfigureDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void deleteDevice(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getDeleteDeviceMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getInitialConfig(context.ContextOuterClass.DeviceId request,
+        io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceConfig> responseObserver) {
+      io.grpc.stub.ClientCalls.asyncUnaryCall(
+          getChannel().newCall(getGetInitialConfigMethod(), getCallOptions()), request, responseObserver);
+    }
+  }
+
+  /**
+   */
+  public static final class DeviceServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<DeviceServiceBlockingStub> {
+    private DeviceServiceBlockingStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected DeviceServiceBlockingStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new DeviceServiceBlockingStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceId addDevice(context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getAddDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceId configureDevice(context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getConfigureDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.Empty deleteDevice(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getDeleteDeviceMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public context.ContextOuterClass.DeviceConfig getInitialConfig(context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.blockingUnaryCall(
+          getChannel(), getGetInitialConfigMethod(), getCallOptions(), request);
+    }
+  }
+
+  /**
+   */
+  public static final class DeviceServiceFutureStub extends io.grpc.stub.AbstractFutureStub<DeviceServiceFutureStub> {
+    private DeviceServiceFutureStub(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      super(channel, callOptions);
+    }
+
+    @java.lang.Override
+    protected DeviceServiceFutureStub build(
+        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+      return new DeviceServiceFutureStub(channel, callOptions);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceId> addDevice(
+        context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getAddDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceId> configureDevice(
+        context.ContextOuterClass.Device request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getConfigureDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.Empty> deleteDevice(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getDeleteDeviceMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<context.ContextOuterClass.DeviceConfig> getInitialConfig(
+        context.ContextOuterClass.DeviceId request) {
+      return io.grpc.stub.ClientCalls.futureUnaryCall(
+          getChannel().newCall(getGetInitialConfigMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_ADD_DEVICE = 0;
+  private static final int METHODID_CONFIGURE_DEVICE = 1;
+  private static final int METHODID_DELETE_DEVICE = 2;
+  private static final int METHODID_GET_INITIAL_CONFIG = 3;
+
+  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 DeviceServiceImplBase serviceImpl;
+    private final int methodId;
+
+    MethodHandlers(DeviceServiceImplBase 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_ADD_DEVICE:
+          serviceImpl.addDevice((context.ContextOuterClass.Device) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver);
+          break;
+        case METHODID_CONFIGURE_DEVICE:
+          serviceImpl.configureDevice((context.ContextOuterClass.Device) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver);
+          break;
+        case METHODID_DELETE_DEVICE:
+          serviceImpl.deleteDevice((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver);
+          break;
+        case METHODID_GET_INITIAL_CONFIG:
+          serviceImpl.getInitialConfig((context.ContextOuterClass.DeviceId) request,
+              (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceConfig>) 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 DeviceServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
+    DeviceServiceBaseDescriptorSupplier() {}
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
+      return device.Device.getDescriptor();
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
+      return getFileDescriptor().findServiceByName("DeviceService");
+    }
+  }
+
+  private static final class DeviceServiceFileDescriptorSupplier
+      extends DeviceServiceBaseDescriptorSupplier {
+    DeviceServiceFileDescriptorSupplier() {}
+  }
+
+  private static final class DeviceServiceMethodDescriptorSupplier
+      extends DeviceServiceBaseDescriptorSupplier
+      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
+    private final String methodName;
+
+    DeviceServiceMethodDescriptorSupplier(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 (DeviceServiceGrpc.class) {
+        result = serviceDescriptor;
+        if (result == null) {
+          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
+              .setSchemaDescriptor(new DeviceServiceFileDescriptorSupplier())
+              .addMethod(getAddDeviceMethod())
+              .addMethod(getConfigureDeviceMethod())
+              .addMethod(getDeleteDeviceMethod())
+              .addMethod(getGetInitialConfigMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}
diff --git a/src/automation/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java b/src/automation/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee52d131578ede0769997d3f76a02a302568c21f
--- /dev/null
+++ b/src/automation/target/generated-sources/grpc/device/MutinyDeviceServiceGrpc.java
@@ -0,0 +1,192 @@
+package device;
+
+import static device.DeviceServiceGrpc.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: device.proto")
+public final class MutinyDeviceServiceGrpc implements io.quarkus.grpc.runtime.MutinyGrpc {
+    private MutinyDeviceServiceGrpc() {}
+
+    public static MutinyDeviceServiceStub newMutinyStub(io.grpc.Channel channel) {
+        return new MutinyDeviceServiceStub(channel);
+    }
+
+    
+    public static final class MutinyDeviceServiceStub extends io.grpc.stub.AbstractStub<MutinyDeviceServiceStub> implements io.quarkus.grpc.runtime.MutinyStub {
+        private DeviceServiceGrpc.DeviceServiceStub delegateStub;
+
+        private MutinyDeviceServiceStub(io.grpc.Channel channel) {
+            super(channel);
+            delegateStub = DeviceServiceGrpc.newStub(channel);
+        }
+
+        private MutinyDeviceServiceStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            super(channel, callOptions);
+            delegateStub = DeviceServiceGrpc.newStub(channel).build(channel, callOptions);
+        }
+
+        @Override
+        protected MutinyDeviceServiceStub build(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
+            return new MutinyDeviceServiceStub(channel, callOptions);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> addDevice(context.ContextOuterClass.Device request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::addDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> configureDevice(context.ContextOuterClass.Device request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::configureDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteDevice(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::deleteDevice);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceConfig> getInitialConfig(context.ContextOuterClass.DeviceId request) {
+            return io.quarkus.grpc.runtime.ClientCalls.oneToOne(request, delegateStub::getInitialConfig);
+        }
+
+    }
+
+    
+    public static abstract class DeviceServiceImplBase 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 DeviceServiceImplBase withCompression(String compression) {
+        this.compression = compression;
+        return this;
+        }
+
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> addDevice(context.ContextOuterClass.Device request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceId> configureDevice(context.ContextOuterClass.Device request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.Empty> deleteDevice(context.ContextOuterClass.DeviceId request) {
+            throw new io.grpc.StatusRuntimeException(io.grpc.Status.UNIMPLEMENTED);
+        }
+
+        
+        public io.smallrye.mutiny.Uni<context.ContextOuterClass.DeviceConfig> getInitialConfig(context.ContextOuterClass.DeviceId 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(
+                            device.DeviceServiceGrpc.getAddDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Device,
+                                            context.ContextOuterClass.DeviceId>(
+                                            this, METHODID_ADD_DEVICE, compression)))
+                    .addMethod(
+                            device.DeviceServiceGrpc.getConfigureDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.Device,
+                                            context.ContextOuterClass.DeviceId>(
+                                            this, METHODID_CONFIGURE_DEVICE, compression)))
+                    .addMethod(
+                            device.DeviceServiceGrpc.getDeleteDeviceMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            context.ContextOuterClass.Empty>(
+                                            this, METHODID_DELETE_DEVICE, compression)))
+                    .addMethod(
+                            device.DeviceServiceGrpc.getGetInitialConfigMethod(),
+                            asyncUnaryCall(
+                                    new MethodHandlers<
+                                            context.ContextOuterClass.DeviceId,
+                                            context.ContextOuterClass.DeviceConfig>(
+                                            this, METHODID_GET_INITIAL_CONFIG, compression)))
+                    .build();
+        }
+    }
+
+    private static final int METHODID_ADD_DEVICE = 0;
+    private static final int METHODID_CONFIGURE_DEVICE = 1;
+    private static final int METHODID_DELETE_DEVICE = 2;
+    private static final int METHODID_GET_INITIAL_CONFIG = 3;
+
+    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 DeviceServiceImplBase serviceImpl;
+        private final int methodId;
+        private final String compression;
+
+        MethodHandlers(DeviceServiceImplBase 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_ADD_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Device) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver,
+                            compression,
+                            serviceImpl::addDevice);
+                    break;
+                case METHODID_CONFIGURE_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.Device) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceId>) responseObserver,
+                            compression,
+                            serviceImpl::configureDevice);
+                    break;
+                case METHODID_DELETE_DEVICE:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.Empty>) responseObserver,
+                            compression,
+                            serviceImpl::deleteDevice);
+                    break;
+                case METHODID_GET_INITIAL_CONFIG:
+                    io.quarkus.grpc.runtime.ServerCalls.oneToOne((context.ContextOuterClass.DeviceId) request,
+                            (io.grpc.stub.StreamObserver<context.ContextOuterClass.DeviceConfig>) responseObserver,
+                            compression,
+                            serviceImpl::getInitialConfig);
+                    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/automation/target/kubernetes/kubernetes.yml b/src/automation/target/kubernetes/kubernetes.yml
new file mode 100644
index 0000000000000000000000000000000000000000..50f7e97714ec7c5be709e6f36ef320ca31e8a4a5
--- /dev/null
+++ b/src/automation/target/kubernetes/kubernetes.yml
@@ -0,0 +1,88 @@
+---
+apiVersion: v1
+kind: Service
+metadata:
+  annotations:
+    app.quarkus.io/commit-id: 632af8e06563eb1a0efb8c52af80cfdc79b14f9a
+    app.quarkus.io/build-timestamp: 2021-11-03 - 14:35:52 +0000
+  labels:
+    app.kubernetes.io/name: automationservice
+    app.kubernetes.io/version: 0.0.1
+    app: automationservice
+  name: automationservice
+spec:
+  ports:
+    - name: http
+      port: 8080
+      targetPort: 8080
+    - name: grpc-server
+      port: 9999
+      targetPort: 9999
+  selector:
+    app.kubernetes.io/name: automationservice
+    app.kubernetes.io/version: 0.0.1
+  type: NodePort
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  annotations:
+    app.quarkus.io/commit-id: 632af8e06563eb1a0efb8c52af80cfdc79b14f9a
+    app.quarkus.io/build-timestamp: 2021-11-03 - 14:35:52 +0000
+  labels:
+    app: automationservice
+    app.kubernetes.io/name: automationservice
+    app.kubernetes.io/version: 0.0.1
+  name: automationservice
+spec:
+  replicas: 1
+  selector:
+    matchLabels:
+      app.kubernetes.io/name: automationservice
+      app.kubernetes.io/version: 0.0.1
+  template:
+    metadata:
+      annotations:
+        app.quarkus.io/commit-id: 632af8e06563eb1a0efb8c52af80cfdc79b14f9a
+        app.quarkus.io/build-timestamp: 2021-11-03 - 14:35:52 +0000
+      labels:
+        app: automationservice
+        app.kubernetes.io/name: automationservice
+        app.kubernetes.io/version: 0.0.1
+    spec:
+      containers:
+        - env:
+            - name: KUBERNETES_NAMESPACE
+              valueFrom:
+                fieldRef:
+                  fieldPath: metadata.namespace
+          image: registry.gitlab.com/teraflow-h2020/controller/automation:0.0.1
+          imagePullPolicy: Always
+          livenessProbe:
+            failureThreshold: 3
+            httpGet:
+              path: /q/health/live
+              port: 8080
+              scheme: HTTP
+            initialDelaySeconds: 5
+            periodSeconds: 45
+            successThreshold: 1
+            timeoutSeconds: 10
+          name: automationservice
+          ports:
+            - containerPort: 8080
+              name: http
+              protocol: TCP
+            - containerPort: 9999
+              name: grpc-server
+              protocol: TCP
+          readinessProbe:
+            failureThreshold: 3
+            httpGet:
+              path: /q/health/ready
+              port: 8080
+              scheme: HTTP
+            initialDelaySeconds: 5
+            periodSeconds: 45
+            successThreshold: 1
+            timeoutSeconds: 10