VOL-2776 Start_omci_test is unimplemented for OLT

Change-Id: I334e5d4ca93ef5f86c46ca046499d6d95a7b36dd
diff --git a/.golangci.yml b/.golangci.yml
index e4fe84b..76983ed 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -82,4 +82,5 @@
     - "don't use underscores in Go names; method Disable_port"
     - "don't use underscores in Go names; method Enable_port"
     - "don't use underscores in Go names; method Child_device_lost"
+    - "don't use underscores in Go names; method Start_omci_test"
   exclude-use-default: false
diff --git a/go.mod b/go.mod
index 046ca7f..ce7ccd5 100644
--- a/go.mod
+++ b/go.mod
@@ -7,8 +7,8 @@
 	github.com/cenkalti/backoff/v3 v3.1.1
 	github.com/gogo/protobuf v1.3.1
 	github.com/golang/protobuf v1.3.2
-	github.com/opencord/voltha-lib-go/v3 v3.0.23
-	github.com/opencord/voltha-protos/v3 v3.2.7
+	github.com/opencord/voltha-lib-go/v3 v3.1.0
+	github.com/opencord/voltha-protos/v3 v3.2.8
 	go.etcd.io/etcd v0.0.0-20190930204107-236ac2a90522
 	google.golang.org/grpc v1.25.1
 )
diff --git a/go.sum b/go.sum
index 5f0ae9d..417322d 100644
--- a/go.sum
+++ b/go.sum
@@ -196,12 +196,10 @@
 github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
 github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I=
 github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opencord/voltha-lib-go/v3 v3.0.23 h1:QJkosPdVm85AaLzVEk4umzcL7p2MmwukU9f83rZTIOU=
-github.com/opencord/voltha-lib-go/v3 v3.0.23/go.mod h1:QuAohPQ+InSw+8XgCFxnp4cpHWcxO2efVTtiBFUmuOY=
-github.com/opencord/voltha-protos/v3 v3.2.3 h1:Wv73mw1Ye0bCfyhOk5svgrlE2tLizHq6tQluoDq9Vg8=
-github.com/opencord/voltha-protos/v3 v3.2.3/go.mod h1:RIGHt7b80BHpHh3ceodknh0DxUjUHCWSbYbZqRx7Og0=
-github.com/opencord/voltha-protos/v3 v3.2.7 h1:zmRtqAz54FfMdmyHO4lfFE5uBaOKkeOLyac1Qvbpels=
-github.com/opencord/voltha-protos/v3 v3.2.7/go.mod h1:nl1ETp5Iw3avxOaKD8BJlYY5wYI4KeV95aT1pL63nto=
+github.com/opencord/voltha-lib-go/v3 v3.1.0 h1:3KPBQT2s5HdCo6bwWHpNFeR8KYbDQMmZEq+aHim6U/o=
+github.com/opencord/voltha-lib-go/v3 v3.1.0/go.mod h1:iOFpFIonmGq6nYG4qYWrF5cKyt7UupDLyB4iGXFDRig=
+github.com/opencord/voltha-protos/v3 v3.2.8 h1:FuMEmUsW4WRpIsNCcELM9QBZZwBLRvuw85DVvfpZ1do=
+github.com/opencord/voltha-protos/v3 v3.2.8/go.mod h1:nl1ETp5Iw3avxOaKD8BJlYY5wYI4KeV95aT1pL63nto=
 github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
 github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
 github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
diff --git a/internal/pkg/core/openolt.go b/internal/pkg/core/openolt.go
index 2e2d976..6e35a3e 100644
--- a/internal/pkg/core/openolt.go
+++ b/internal/pkg/core/openolt.go
@@ -384,3 +384,8 @@
 	}
 	return olterrors.NewErrNotFound("device-handler", log.Fields{"device-id": deviceID}, nil).Log()
 }
+
+//Start_omci_test not implemented
+func (oo *OpenOLT) Start_omci_test(device *voltha.Device, request *voltha.OmciTestRequest) (*voltha.TestResponse, error) {
+	return nil, olterrors.ErrNotImplemented
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/common.go
index acf818c..95a036d 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/common.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/common.go
@@ -19,16 +19,12 @@
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
 )
 
-const (
-	logLevel = log.ErrorLevel
-)
-
 var logger log.Logger
 
 func init() {
 	// Setup this package so that it's log level can be modified at run time
 	var err error
-	logger, err = log.AddPackage(log.JSON, logLevel, log.Fields{"pkg": "common"})
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "common"})
 	if err != nil {
 		panic(err)
 	}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go
index 86f186d..9582f33 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/core_proxy.go
@@ -154,7 +154,7 @@
 }
 
 func (ap *CoreProxy) PortsStateUpdate(ctx context.Context, deviceId string, operStatus voltha.OperStatus_Types) error {
-	log.Debugw("PortsStateUpdate", log.Fields{"deviceId": deviceId})
+	logger.Debugw("PortsStateUpdate", log.Fields{"deviceId": deviceId})
 	rpc := "PortsStateUpdate"
 	// Use a device specific topic to send the request.  The adapter handling the device creates a device
 	// specific topic
@@ -202,7 +202,7 @@
 
 func (ap *CoreProxy) DeviceStateUpdate(ctx context.Context, deviceId string,
 	connStatus voltha.ConnectStatus_Types, operStatus voltha.OperStatus_Types) error {
-	log.Debugw("DeviceStateUpdate", log.Fields{"deviceId": deviceId})
+	logger.Debugw("DeviceStateUpdate", log.Fields{"deviceId": deviceId})
 	rpc := "DeviceStateUpdate"
 	// Use a device specific topic to send the request.  The adapter handling the device creates a device
 	// specific topic
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go
index 5b00887..843b95c 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/request_handler.go
@@ -701,3 +701,37 @@
 	}
 	return nil
 }
+
+func (rhp *RequestHandlerProxy) Start_omci_test(args []*ic.Argument) (*ic.TestResponse, error) {
+	if len(args) < 2 {
+		logger.Warn("invalid-number-of-args", log.Fields{"args": args})
+		err := errors.New("invalid-number-of-args")
+		return nil, err
+	}
+
+	// TODO: See related comment in voltha-go:adapter_proxy_go:startOmciTest()
+	//   Second argument should perhaps be uuid instead of omcitestrequest
+
+	device := &voltha.Device{}
+	request := &voltha.OmciTestRequest{}
+	for _, arg := range args {
+		switch arg.Key {
+		case "device":
+			if err := ptypes.UnmarshalAny(arg.Value, device); err != nil {
+				logger.Warnw("cannot-unmarshal-device", log.Fields{"error": err})
+				return nil, err
+			}
+		case "omcitestrequest":
+			if err := ptypes.UnmarshalAny(arg.Value, request); err != nil {
+				logger.Warnw("cannot-unmarshal-omcitestrequest", log.Fields{"error": err})
+				return nil, err
+			}
+		}
+	}
+	logger.Debugw("Start_omci_test", log.Fields{"device-id": device.Id, "req": request})
+	result, err := rhp.adapter.Start_omci_test(device, request)
+	if err != nil {
+		return nil, status.Errorf(codes.NotFound, "%s", err.Error())
+	}
+	return result, nil
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go
index b782ebe..94e8bd6 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/common/utils.go
@@ -84,7 +84,7 @@
 	case ic.ErrorCode_DEADLINE_EXCEEDED:
 		return codes.DeadlineExceeded
 	default:
-		log.Warnw("cannnot-map-ic-error-code-to-grpc-error-code", log.Fields{"err": icErr})
+		logger.Warnw("cannnot-map-ic-error-code-to-grpc-error-code", log.Fields{"err": icErr})
 		return codes.Internal
 	}
 }
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go
index fc57247..112fb94 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/adapters/iAdapter.go
@@ -52,4 +52,5 @@
 	Enable_port(deviceId string, port *voltha.Port) error
 	Disable_port(deviceId string, port *voltha.Port) error
 	Child_device_lost(parentDeviceId string, parentPortNo uint32, onuID uint32) error
+	Start_omci_test(device *voltha.Device, request *voltha.OmciTestRequest) (*voltha.TestResponse, error)
 }
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/common.go
new file mode 100644
index 0000000..37e05fd
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/common.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package config
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "config"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/configmanager.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/configmanager.go
index 441c488..9f08b0d 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/configmanager.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/configmanager.go
@@ -24,13 +24,6 @@
 	"strings"
 )
 
-func init() {
-	_, err := log.AddPackage(log.JSON, log.FatalLevel, nil)
-	if err != nil {
-		log.Errorw("unable-to-register-package-to-the-log-map", log.Fields{"error": err})
-	}
-}
-
 const (
 	defaultkvStoreConfigPath = "config"
 	kvStoreDataPathPrefix    = "service/voltha"
@@ -171,7 +164,7 @@
 func (c *ComponentConfig) MonitorForConfigChange(ctx context.Context) chan *ConfigChangeEvent {
 	key := c.makeConfigPath()
 
-	log.Debugw("monitoring-for-config-change", log.Fields{"key": key})
+	logger.Debugw("monitoring-for-config-change", log.Fields{"key": key})
 
 	c.changeEventChan = make(chan *ConfigChangeEvent, 1)
 
@@ -188,14 +181,14 @@
 
 	ccKeyPrefix := c.makeConfigPath()
 
-	log.Debugw("processing-kvstore-event-change", log.Fields{"key-prefix": ccKeyPrefix})
+	logger.Debugw("processing-kvstore-event-change", log.Fields{"key-prefix": ccKeyPrefix})
 
 	ccPathPrefix := c.cManager.backend.PathPrefix + ccKeyPrefix + kvStorePathSeparator
 
 	for watchResp := range c.kvStoreEventChan {
 
 		if watchResp.EventType == kvstore.CONNECTIONDOWN || watchResp.EventType == kvstore.UNKNOWN {
-			log.Warnw("received-invalid-change-type-in-watch-channel-from-kvstore", log.Fields{"change-type": watchResp.EventType})
+			logger.Warnw("received-invalid-change-type-in-watch-channel-from-kvstore", log.Fields{"change-type": watchResp.EventType})
 			continue
 		}
 
@@ -215,7 +208,7 @@
 func (c *ComponentConfig) Retrieve(ctx context.Context, configKey string) (string, error) {
 	key := c.makeConfigPath() + "/" + configKey
 
-	log.Debugw("retrieving-config", log.Fields{"key": key})
+	logger.Debugw("retrieving-config", log.Fields{"key": key})
 
 	if kvpair, err := c.cManager.backend.Get(ctx, key); err != nil {
 		return "", err
@@ -225,7 +218,7 @@
 		}
 
 		value := strings.Trim(fmt.Sprintf("%s", kvpair.Value), "\"")
-		log.Debugw("retrieved-config", log.Fields{"key": key, "value": value})
+		logger.Debugw("retrieved-config", log.Fields{"key": key, "value": value})
 		return value, nil
 	}
 }
@@ -233,7 +226,7 @@
 func (c *ComponentConfig) RetrieveAll(ctx context.Context) (map[string]string, error) {
 	key := c.makeConfigPath()
 
-	log.Debugw("retreiving-list", log.Fields{"key": key})
+	logger.Debugw("retreiving-list", log.Fields{"key": key})
 
 	data, err := c.cManager.backend.List(ctx, key)
 	if err != nil {
@@ -256,7 +249,7 @@
 func (c *ComponentConfig) Save(ctx context.Context, configKey string, configValue string) error {
 	key := c.makeConfigPath() + "/" + configKey
 
-	log.Debugw("saving-config", log.Fields{"key": key, "value": configValue})
+	logger.Debugw("saving-config", log.Fields{"key": key, "value": configValue})
 
 	//save the data for update config
 	if err := c.cManager.backend.Put(ctx, key, configValue); err != nil {
@@ -269,7 +262,7 @@
 	//construct key using makeConfigPath
 	key := c.makeConfigPath() + "/" + configKey
 
-	log.Debugw("deleting-config", log.Fields{"key": key})
+	logger.Debugw("deleting-config", log.Fields{"key": key})
 	//delete the config
 	if err := c.cManager.backend.Delete(ctx, key); err != nil {
 		return err
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/logcontroller.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/logcontroller.go
index 65927e6..b929c9d 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/logcontroller.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/config/logcontroller.go
@@ -51,7 +51,7 @@
 
 func NewComponentLogController(cm *ConfigManager) (*ComponentLogController, error) {
 
-	log.Debug("creating-new-component-log-controller")
+	logger.Debug("creating-new-component-log-controller")
 	componentName := os.Getenv("COMPONENT_NAME")
 	if componentName == "" {
 		return nil, errors.New("Unable to retrieve PoD Component Name from Runtime env")
@@ -80,15 +80,15 @@
 func StartLogLevelConfigProcessing(cm *ConfigManager, ctx context.Context) {
 	cc, err := NewComponentLogController(cm)
 	if err != nil {
-		log.Errorw("unable-to-construct-component-log-controller-instance-for-log-config-monitoring", log.Fields{"error": err})
+		logger.Errorw("unable-to-construct-component-log-controller-instance-for-log-config-monitoring", log.Fields{"error": err})
 		return
 	}
 
 	cc.GlobalConfig = cm.InitComponentConfig(globalConfigRootNode, ConfigTypeLogLevel)
-	log.Debugw("global-log-config", log.Fields{"cc-global-config": cc.GlobalConfig})
+	logger.Debugw("global-log-config", log.Fields{"cc-global-config": cc.GlobalConfig})
 
 	cc.componentNameConfig = cm.InitComponentConfig(cc.ComponentName, ConfigTypeLogLevel)
-	log.Debugw("component-log-config", log.Fields{"cc-component-name-config": cc.componentNameConfig})
+	logger.Debugw("component-log-config", log.Fields{"cc-component-name-config": cc.componentNameConfig})
 
 	cc.persistInitialDefaultLogConfigs(ctx)
 
@@ -101,21 +101,21 @@
 
 	_, err := c.GlobalConfig.Retrieve(ctx, defaultLogLevelKey)
 	if err != nil {
-		log.Debugw("failed-to-retrieve-global-default-log-config-at-startup", log.Fields{"error": err})
+		logger.Debugw("failed-to-retrieve-global-default-log-config-at-startup", log.Fields{"error": err})
 
 		err = c.GlobalConfig.Save(ctx, defaultLogLevelKey, initialGlobalDefaultLogLevelValue)
 		if err != nil {
-			log.Errorw("failed-to-persist-global-default-log-config-at-startup", log.Fields{"error": err, "loglevel": initialGlobalDefaultLogLevelValue})
+			logger.Errorw("failed-to-persist-global-default-log-config-at-startup", log.Fields{"error": err, "loglevel": initialGlobalDefaultLogLevelValue})
 		}
 	}
 
 	_, err = c.componentNameConfig.Retrieve(ctx, defaultLogLevelKey)
 	if err != nil {
-		log.Debugw("failed-to-retrieve-component-default-log-config-at-startup", log.Fields{"error": err})
+		logger.Debugw("failed-to-retrieve-component-default-log-config-at-startup", log.Fields{"error": err})
 
 		err = c.componentNameConfig.Save(ctx, defaultLogLevelKey, c.initialLogLevel)
 		if err != nil {
-			log.Errorw("failed-to-persist-component-default-log-config-at-startup", log.Fields{"error": err, "loglevel": c.initialLogLevel})
+			logger.Errorw("failed-to-persist-component-default-log-config-at-startup", log.Fields{"error": err, "loglevel": c.initialLogLevel})
 		}
 	}
 }
@@ -129,10 +129,10 @@
 	// Load and apply Log Config for first time
 	initialLogConfig, err := c.buildUpdatedLogConfig(ctx)
 	if err != nil {
-		log.Warnw("unable-to-load-log-config-at-startup", log.Fields{"error": err})
+		logger.Warnw("unable-to-load-log-config-at-startup", log.Fields{"error": err})
 	} else {
 		if err := c.loadAndApplyLogConfig(initialLogConfig); err != nil {
-			log.Warnw("unable-to-apply-log-config-at-startup", log.Fields{"error": err})
+			logger.Warnw("unable-to-apply-log-config-at-startup", log.Fields{"error": err})
 		}
 	}
 
@@ -148,18 +148,18 @@
 		case configEvent = <-componentConfigEventChan:
 
 		}
-		log.Debugw("processing-log-config-change", log.Fields{"ChangeType": configEvent.ChangeType, "Package": configEvent.ConfigAttribute})
+		logger.Debugw("processing-log-config-change", log.Fields{"ChangeType": configEvent.ChangeType, "Package": configEvent.ConfigAttribute})
 
 		updatedLogConfig, err := c.buildUpdatedLogConfig(ctx)
 		if err != nil {
-			log.Warnw("unable-to-fetch-updated-log-config", log.Fields{"error": err})
+			logger.Warnw("unable-to-fetch-updated-log-config", log.Fields{"error": err})
 			continue
 		}
 
-		log.Debugw("applying-updated-log-config", log.Fields{"updated-log-config": updatedLogConfig})
+		logger.Debugw("applying-updated-log-config", log.Fields{"updated-log-config": updatedLogConfig})
 
 		if err := c.loadAndApplyLogConfig(updatedLogConfig); err != nil {
-			log.Warnw("unable-to-load-and-apply-log-config", log.Fields{"error": err})
+			logger.Warnw("unable-to-load-and-apply-log-config", log.Fields{"error": err})
 		}
 	}
 
@@ -178,7 +178,7 @@
 	for _, packageName := range log.GetPackageNames() {
 		level, err := log.GetPackageLogLevel(packageName)
 		if err != nil {
-			log.Warnw("unable-to-fetch-current-active-loglevel-for-package-name", log.Fields{"package-name": packageName, "error": err})
+			logger.Warnw("unable-to-fetch-current-active-loglevel-for-package-name", log.Fields{"package-name": packageName, "error": err})
 			continue
 		}
 
@@ -187,7 +187,7 @@
 		}
 	}
 
-	log.Debugw("retreived-log-levels-from-zap-logger", log.Fields{"loglevels": loglevels})
+	logger.Debugw("retreived-log-levels-from-zap-logger", log.Fields{"loglevels": loglevels})
 
 	return loglevels
 }
@@ -202,16 +202,16 @@
 	// Handle edge cases when global default loglevel is deleted directly from etcd or set to a invalid value
 	// We should use hard-coded initial default value in such cases
 	if globalDefaultLogLevel == "" {
-		log.Warn("global-default-loglevel-not-found-in-config-store")
+		logger.Warn("global-default-loglevel-not-found-in-config-store")
 		globalDefaultLogLevel = initialGlobalDefaultLogLevelValue
 	}
 
 	if _, err := log.StringToLogLevel(globalDefaultLogLevel); err != nil {
-		log.Warnw("unsupported-loglevel-config-defined-at-global-default", log.Fields{"log-level": globalDefaultLogLevel})
+		logger.Warnw("unsupported-loglevel-config-defined-at-global-default", log.Fields{"log-level": globalDefaultLogLevel})
 		globalDefaultLogLevel = initialGlobalDefaultLogLevelValue
 	}
 
-	log.Debugw("retrieved-global-default-loglevel", log.Fields{"level": globalDefaultLogLevel})
+	logger.Debugw("retrieved-global-default-loglevel", log.Fields{"level": globalDefaultLogLevel})
 
 	return globalDefaultLogLevel, nil
 }
@@ -225,7 +225,7 @@
 	effectiveDefaultLogLevel := ""
 	for logConfigKey, logConfigValue := range componentLogConfig {
 		if _, err := log.StringToLogLevel(logConfigValue); err != nil || logConfigKey == "" {
-			log.Warnw("unsupported-loglevel-config-defined-at-component-context", log.Fields{"package-name": logConfigKey, "log-level": logConfigValue})
+			logger.Warnw("unsupported-loglevel-config-defined-at-component-context", log.Fields{"package-name": logConfigKey, "log-level": logConfigValue})
 			delete(componentLogConfig, logConfigKey)
 		} else {
 			if logConfigKey == defaultLogLevelKey {
@@ -242,7 +242,7 @@
 
 	componentLogConfig[defaultLogLevelKey] = effectiveDefaultLogLevel
 
-	log.Debugw("retrieved-component-log-config", log.Fields{"component-log-level": componentLogConfig})
+	logger.Debugw("retrieved-component-log-config", log.Fields{"component-log-level": componentLogConfig})
 
 	return componentLogConfig, nil
 }
@@ -256,7 +256,7 @@
 func (c *ComponentLogController) buildUpdatedLogConfig(ctx context.Context) (map[string]string, error) {
 	globalLogLevel, err := c.getGlobalLogConfig(ctx)
 	if err != nil {
-		log.Errorw("unable-to-retrieve-global-log-config", log.Fields{"err": err})
+		logger.Errorw("unable-to-retrieve-global-log-config", log.Fields{"err": err})
 	}
 
 	componentLogConfig, err := c.getComponentLogConfig(ctx, globalLogLevel)
@@ -286,7 +286,7 @@
 		UpdateLogLevels(logConfig)
 		c.logHash = currentLogHash
 	} else {
-		log.Debug("effective-loglevel-config-same-as-currently-active")
+		logger.Debug("effective-loglevel-config-same-as-currently-active")
 	}
 
 	return nil
@@ -313,7 +313,7 @@
 	// Log warnings for all invalid packages for which log config has been set
 	for key, value := range updatedLogLevels {
 		if _, exist := activeLogLevels[key]; !exist {
-			log.Warnw("ignoring-loglevel-set-for-invalid-package", log.Fields{"package": key, "log-level": value})
+			logger.Warnw("ignoring-loglevel-set-for-invalid-package", log.Fields{"package": key, "log-level": value})
 		}
 	}
 
@@ -330,11 +330,11 @@
 
 	// If no changed log levels are found, just return. It may happen on configuration of a invalid package
 	if len(changedLogLevels) == 0 {
-		log.Debug("no-change-in-effective-loglevel-config")
+		logger.Debug("no-change-in-effective-loglevel-config")
 		return
 	}
 
-	log.Debugw("applying-log-level-for-modified-packages", log.Fields{"changed-log-levels": changedLogLevels})
+	logger.Debugw("applying-log-level-for-modified-packages", log.Fields{"changed-log-levels": changedLogLevels})
 	for key, level := range changedLogLevels {
 		if key == defaultLogLevelKey {
 			if l, err := log.StringToLogLevel(level); err == nil {
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/common.go
index a5a79ae..1cf2e1c 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/common.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/common.go
@@ -19,16 +19,12 @@
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
 )
 
-const (
-	logLevel = log.ErrorLevel
-)
-
 var logger log.Logger
 
 func init() {
 	// Setup this package so that it's log level can be modified at run time
 	var err error
-	logger, err = log.AddPackage(log.JSON, logLevel, log.Fields{"pkg": "db"})
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "db"})
 	if err != nil {
 		panic(err)
 	}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/common.go
index 2d2a6a6..aa7aeb0 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/common.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/db/kvstore/common.go
@@ -19,16 +19,12 @@
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
 )
 
-const (
-	logLevel = log.ErrorLevel
-)
-
 var logger log.Logger
 
 func init() {
 	// Setup this package so that it's log level can be modified at run time
 	var err error
-	logger, err = log.AddPackage(log.JSON, logLevel, log.Fields{"pkg": "kvstore"})
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "kvstore"})
 	if err != nil {
 		panic(err)
 	}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/flows/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/flows/common.go
index b4fe7ec..557de3f 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/flows/common.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/flows/common.go
@@ -19,16 +19,12 @@
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
 )
 
-const (
-	logLevel = log.ErrorLevel
-)
-
 var logger log.Logger
 
 func init() {
 	// Setup this package so that it's log level can be modified at run time
 	var err error
-	logger, err = log.AddPackage(log.JSON, logLevel, log.Fields{"pkg": "flowsUtils"})
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "flowsUtils"})
 	if err != nil {
 		panic(err)
 	}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/common.go
index cb6acb2..149c150 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/common.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/common.go
@@ -19,16 +19,12 @@
 	"github.com/opencord/voltha-lib-go/v3/pkg/log"
 )
 
-const (
-	logLevel = log.ErrorLevel
-)
-
 var logger log.Logger
 
 func init() {
 	// Setup this package so that it's log level can be modified at run time
 	var err error
-	logger, err = log.AddPackage(log.JSON, logLevel, log.Fields{"pkg": "kafka"})
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "kafka"})
 	if err != nil {
 		panic(err)
 	}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go
index 5dbde9c..fc2334d 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/kafka/kafka_inter_container_library.go
@@ -194,11 +194,11 @@
 	kp.kafkaClient.Stop()
 	err := kp.deleteAllTopicRequestHandlerChannelMap()
 	if err != nil {
-		log.Errorw("failed-delete-all-topic-request-handler-channel-map", log.Fields{"error": err})
+		logger.Errorw("failed-delete-all-topic-request-handler-channel-map", log.Fields{"error": err})
 	}
 	err = kp.deleteAllTopicResponseChannelMap()
 	if err != nil {
-		log.Errorw("failed-delete-all-topic-response-channel-map", log.Fields{"error": err})
+		logger.Errorw("failed-delete-all-topic-response-channel-map", log.Fields{"error": err})
 	}
 	kp.deleteAllTransactionIdToChannelMap()
 }
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go
index 47fa3fb..d0169bd 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/log/log.go
@@ -499,11 +499,11 @@
 }
 
 func getPackageLevelSugaredLogger() *zp.SugaredLogger {
-	pkgName, fileName, funcName, line := getCallerInfo()
+	pkgName, _, _, _ := getCallerInfo()
 	if _, exist := loggers[pkgName]; exist {
-		return loggers[pkgName].log.With("caller", fmt.Sprintf("%s.%s:%d", fileName, funcName, line))
+		return loggers[pkgName].log
 	}
-	return defaultLogger.log.With("caller", fmt.Sprintf("%s.%s:%d", fileName, funcName, line))
+	return defaultLogger.log
 }
 
 func getPackageLevelLogger() Logger {
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/common.go
new file mode 100644
index 0000000..0f4339e
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/common.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package ponresourcemanager
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "ponresourcemanager"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/ponresourcemanager.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/ponresourcemanager.go
index 79fefc5..9854b2b 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/ponresourcemanager.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/ponresourcemanager/ponresourcemanager.go
@@ -156,7 +156,7 @@
 }
 
 func newKVClient(storeType string, address string, timeout int) (kvstore.Client, error) {
-	log.Infow("kv-store-type", log.Fields{"store": storeType})
+	logger.Infow("kv-store-type", log.Fields{"store": storeType})
 	switch storeType {
 	case "consul":
 		return kvstore.NewConsulClient(address, timeout)
@@ -172,7 +172,7 @@
 	// issue between kv store and backend , core is not calling NewBackend directly
 	kvClient, err := newKVClient(Backend, addr, KVSTORE_RETRY_TIMEOUT)
 	if err != nil {
-		log.Fatalw("Failed to init KV client\n", log.Fields{"err": err})
+		logger.Fatalw("Failed to init KV client\n", log.Fields{"err": err})
 		return nil
 	}
 
@@ -205,18 +205,18 @@
 	PONMgr.Port = Port
 	PONMgr.KVStore = SetKVClient(Technology, Backend, Host, Port, false)
 	if PONMgr.KVStore == nil {
-		log.Error("KV Client initilization failed")
+		logger.Error("KV Client initilization failed")
 		return nil, errors.New("Failed to init KV client")
 	}
 	// init kv client to read from the config path
 	PONMgr.KVStoreForConfig = SetKVClient(Technology, Backend, Host, Port, true)
 	if PONMgr.KVStoreForConfig == nil {
-		log.Error("KV Config Client initilization failed")
+		logger.Error("KV Config Client initilization failed")
 		return nil, errors.New("Failed to init KV Config client")
 	}
 	// Initialize techprofile for this technology
 	if PONMgr.TechProfileMgr, _ = tp.NewTechProfile(&PONMgr, Backend, Host, Port); PONMgr.TechProfileMgr == nil {
-		log.Error("Techprofile initialization failed")
+		logger.Error("Techprofile initialization failed")
 		return nil, errors.New("Failed to init tech profile")
 	}
 	PONMgr.PonResourceRanges = make(map[string]interface{})
@@ -244,32 +244,32 @@
 	// Try to initialize the PON Resource Ranges from KV store based on the
 	// OLT model key, if available
 	if PONRMgr.OLTModel == "" {
-		log.Error("Failed to get OLT model")
+		logger.Error("Failed to get OLT model")
 		return false
 	}
 	Path := fmt.Sprintf(PON_RESOURCE_RANGE_CONFIG_PATH, PONRMgr.OLTModel)
 	//get resource from kv store
 	Result, err := PONRMgr.KVStore.Get(ctx, Path)
 	if err != nil {
-		log.Debugf("Error in fetching resource %s from KV strore", Path)
+		logger.Debugf("Error in fetching resource %s from KV strore", Path)
 		return false
 	}
 	if Result == nil {
-		log.Debug("There may be no resources in the KV store in case of fresh bootup, return true")
+		logger.Debug("There may be no resources in the KV store in case of fresh bootup, return true")
 		return false
 	}
 	//update internal ranges from kv ranges. If there are missing
 	// values in the KV profile, continue to use the defaults
 	Value, err := ToByte(Result.Value)
 	if err != nil {
-		log.Error("Failed to convert kvpair to byte string")
+		logger.Error("Failed to convert kvpair to byte string")
 		return false
 	}
 	if err := json.Unmarshal(Value, &PONRMgr.PonResourceRanges); err != nil {
-		log.Error("Failed to Unmarshal json byte")
+		logger.Error("Failed to Unmarshal json byte")
 		return false
 	}
-	log.Debug("Init resource ranges from kvstore success")
+	logger.Debug("Init resource ranges from kvstore success")
 	return true
 }
 
@@ -285,7 +285,7 @@
 	   param: shared pool id
 	   param: global resource manager
 	*/
-	log.Debugf("update ranges for %s, %d", StartIDx, StartID)
+	logger.Debugf("update ranges for %s, %d", StartIDx, StartID)
 
 	if StartID != 0 {
 		if (PONRMgr.PonResourceRanges[StartIDx] == nil) || (PONRMgr.PonResourceRanges[StartIDx].(uint32) < StartID) {
@@ -344,7 +344,7 @@
 	PONRMgr.UpdateRanges(GEMPORT_ID_START_IDX, GEMPortIDStart, GEMPORT_ID_END_IDX, GEMPortIDEnd, GEMPORT_ID_SHARED_IDX, GEMPortIDSharedPoolID, nil)
 	PONRMgr.UpdateRanges(FLOW_ID_START_IDX, FlowIDStart, FLOW_ID_END_IDX, FlowIDEnd, FLOW_ID_SHARED_IDX, FlowIDSharedPoolID, nil)
 	PONRMgr.UpdateRanges(UNI_ID_START_IDX, UNIIDStart, UNI_ID_END_IDX, UNIIDEnd, "", 0, nil)
-	log.Debug("Initialize default range values")
+	logger.Debug("Initialize default range values")
 	var i uint32
 	if IntfIDs == nil {
 		for i = 0; i < NoOfPONPorts; i++ {
@@ -360,7 +360,7 @@
 
 	//Initialize resource pool for all PON ports.
 
-	log.Debug("Init resource ranges")
+	logger.Debug("Init resource ranges")
 
 	var err error
 	for _, Intf := range PONRMgr.IntfIDs {
@@ -371,7 +371,7 @@
 		if err = PONRMgr.InitResourceIDPool(ctx, Intf, ONU_ID,
 			PONRMgr.PonResourceRanges[ONU_ID_START_IDX].(uint32),
 			PONRMgr.PonResourceRanges[ONU_ID_END_IDX].(uint32)); err != nil {
-			log.Error("Failed to init ONU ID resource pool")
+			logger.Error("Failed to init ONU ID resource pool")
 			return err
 		}
 		if SharedPoolID != 0 {
@@ -387,7 +387,7 @@
 		if err = PONRMgr.InitResourceIDPool(ctx, Intf, ALLOC_ID,
 			PONRMgr.PonResourceRanges[ALLOC_ID_START_IDX].(uint32),
 			PONRMgr.PonResourceRanges[ALLOC_ID_END_IDX].(uint32)); err != nil {
-			log.Error("Failed to init ALLOC ID resource pool ")
+			logger.Error("Failed to init ALLOC ID resource pool ")
 			return err
 		}
 		if SharedPoolID != 0 {
@@ -402,7 +402,7 @@
 		if err = PONRMgr.InitResourceIDPool(ctx, Intf, GEMPORT_ID,
 			PONRMgr.PonResourceRanges[GEMPORT_ID_START_IDX].(uint32),
 			PONRMgr.PonResourceRanges[GEMPORT_ID_END_IDX].(uint32)); err != nil {
-			log.Error("Failed to init GEMPORT ID resource pool")
+			logger.Error("Failed to init GEMPORT ID resource pool")
 			return err
 		}
 		if SharedPoolID != 0 {
@@ -418,7 +418,7 @@
 		if err = PONRMgr.InitResourceIDPool(ctx, Intf, FLOW_ID,
 			PONRMgr.PonResourceRanges[FLOW_ID_START_IDX].(uint32),
 			PONRMgr.PonResourceRanges[FLOW_ID_END_IDX].(uint32)); err != nil {
-			log.Error("Failed to init FLOW ID resource pool")
+			logger.Error("Failed to init FLOW ID resource pool")
 			return err
 		}
 		if SharedPoolID != 0 {
@@ -432,7 +432,7 @@
 
 	//Clear resource pool for all PON ports.
 
-	log.Debug("Clear resource ranges")
+	logger.Debug("Clear resource ranges")
 
 	for _, Intf := range PONRMgr.IntfIDs {
 		SharedPoolID := PONRMgr.PonResourceRanges[ONU_ID_SHARED_IDX].(uint32)
@@ -440,7 +440,7 @@
 			Intf = SharedPoolID
 		}
 		if status := PONRMgr.ClearResourceIDPool(ctx, Intf, ONU_ID); !status {
-			log.Error("Failed to clear ONU ID resource pool")
+			logger.Error("Failed to clear ONU ID resource pool")
 			return errors.New("Failed to clear ONU ID resource pool")
 		}
 		if SharedPoolID != 0 {
@@ -454,7 +454,7 @@
 			Intf = SharedPoolID
 		}
 		if status := PONRMgr.ClearResourceIDPool(ctx, Intf, ALLOC_ID); !status {
-			log.Error("Failed to clear ALLOC ID resource pool ")
+			logger.Error("Failed to clear ALLOC ID resource pool ")
 			return errors.New("Failed to clear ALLOC ID resource pool")
 		}
 		if SharedPoolID != 0 {
@@ -467,7 +467,7 @@
 			Intf = SharedPoolID
 		}
 		if status := PONRMgr.ClearResourceIDPool(ctx, Intf, GEMPORT_ID); !status {
-			log.Error("Failed to clear GEMPORT ID resource pool")
+			logger.Error("Failed to clear GEMPORT ID resource pool")
 			return errors.New("Failed to clear GEMPORT ID resource pool")
 		}
 		if SharedPoolID != 0 {
@@ -481,7 +481,7 @@
 			Intf = SharedPoolID
 		}
 		if status := PONRMgr.ClearResourceIDPool(ctx, Intf, FLOW_ID); !status {
-			log.Error("Failed to clear FLOW ID resource pool")
+			logger.Error("Failed to clear FLOW ID resource pool")
 			return errors.New("Failed to clear FLOW ID resource pool")
 		}
 		if SharedPoolID != 0 {
@@ -510,7 +510,7 @@
 
 	Path := PONRMgr.GetPath(Intf, ResourceType)
 	if Path == "" {
-		log.Errorf("Failed to get path for resource type %s", ResourceType)
+		logger.Errorf("Failed to get path for resource type %s", ResourceType)
 		return fmt.Errorf("Failed to get path for resource type %s", ResourceType)
 	}
 
@@ -518,7 +518,7 @@
 	//checked for its presence if not kv store update happens
 	Res, err := PONRMgr.GetResource(ctx, Path)
 	if (err == nil) && (Res != nil) {
-		log.Debugf("Resource %s already present in store ", Path)
+		logger.Debugf("Resource %s already present in store ", Path)
 		return nil
 	} else {
 		var excluded []uint32
@@ -526,23 +526,23 @@
 			//get gem port ids defined in the KV store, if any, and exclude them from the gem port id pool
 			if reservedGemPortIds, defined := PONRMgr.getReservedGemPortIdsFromKVStore(ctx); defined {
 				excluded = reservedGemPortIds
-				log.Debugw("Excluding some ports from GEM port id pool", log.Fields{"excluded gem ports": excluded})
+				logger.Debugw("Excluding some ports from GEM port id pool", log.Fields{"excluded gem ports": excluded})
 			}
 		}
 		FormatResult, err := PONRMgr.FormatResource(Intf, StartID, EndID, excluded)
 		if err != nil {
-			log.Errorf("Failed to format resource")
+			logger.Errorf("Failed to format resource")
 			return err
 		}
 		// Add resource as json in kv store.
 		err = PONRMgr.KVStore.Put(ctx, Path, FormatResult)
 		if err == nil {
-			log.Debug("Successfuly posted to kv store")
+			logger.Debug("Successfuly posted to kv store")
 			return err
 		}
 	}
 
-	log.Debug("Error initializing pool")
+	logger.Debug("Error initializing pool")
 
 	return err
 }
@@ -552,7 +552,7 @@
 	// read reserved gem ports from the config path
 	KvPair, err := PONRMgr.KVStoreForConfig.Get(ctx, RESERVED_GEMPORT_IDS_PATH)
 	if err != nil {
-		log.Errorw("Unable to get reserved GEM port ids from the kv store", log.Fields{"err": err})
+		logger.Errorw("Unable to get reserved GEM port ids from the kv store", log.Fields{"err": err})
 		return reservedGemPortIds, false
 	}
 	if KvPair == nil || KvPair.Value == nil {
@@ -561,11 +561,11 @@
 	}
 	Val, err := kvstore.ToByte(KvPair.Value)
 	if err != nil {
-		log.Errorw("Failed to convert reserved gem port ids into byte array", log.Fields{"err": err})
+		logger.Errorw("Failed to convert reserved gem port ids into byte array", log.Fields{"err": err})
 		return reservedGemPortIds, false
 	}
 	if err = json.Unmarshal(Val, &reservedGemPortIds); err != nil {
-		log.Errorw("Failed to unmarshal reservedGemPortIds", log.Fields{"err": err})
+		logger.Errorw("Failed to unmarshal reservedGemPortIds", log.Fields{"err": err})
 		return reservedGemPortIds, false
 	}
 	return reservedGemPortIds, true
@@ -593,12 +593,12 @@
 	*/
 	var TSData *bitmap.Threadsafe
 	if TSData = bitmap.NewTS(int(EndIDx)); TSData == nil {
-		log.Error("Failed to create a bitmap")
+		logger.Error("Failed to create a bitmap")
 		return nil, errors.New("Failed to create bitmap")
 	}
 	for _, excludedID := range Excluded {
 		if excludedID < StartIDx || excludedID > EndIDx {
-			log.Warnf("Cannot reserve %d. It must be in the range of [%d, %d]", excludedID,
+			logger.Warnf("Cannot reserve %d. It must be in the range of [%d, %d]", excludedID,
 				StartIDx, EndIDx)
 			continue
 		}
@@ -608,7 +608,7 @@
 
 	Value, err := json.Marshal(Resource)
 	if err != nil {
-		log.Errorf("Failed to marshall resource")
+		logger.Errorf("Failed to marshall resource")
 		return nil, err
 	}
 	return Value, err
@@ -628,7 +628,7 @@
 
 	Resource, err := PONRMgr.KVStore.Get(ctx, Path)
 	if (err != nil) || (Resource == nil) {
-		log.Debugf("Resource  unavailable at %s", Path)
+		logger.Debugf("Resource  unavailable at %s", Path)
 		return nil, err
 	}
 
@@ -640,7 +640,7 @@
 	// decode resource fetched from backend store to dictionary
 	err = json.Unmarshal(Value, &Result)
 	if err != nil {
-		log.Error("Failed to decode resource")
+		logger.Error("Failed to decode resource")
 		return Result, err
 	}
 	/*
@@ -650,13 +650,13 @@
 	*/
 	Str, err = ToString(Result[POOL])
 	if err != nil {
-		log.Error("Failed to conver to kv pair to string")
+		logger.Error("Failed to conver to kv pair to string")
 		return Result, err
 	}
 	Decode64, _ := base64.StdEncoding.DecodeString(Str)
 	Result[POOL], err = ToByte(Decode64)
 	if err != nil {
-		log.Error("Failed to convert resource pool to byte")
+		logger.Error("Failed to convert resource pool to byte")
 		return Result, err
 	}
 
@@ -689,7 +689,7 @@
 	} else if ResourceType == FLOW_ID {
 		Path = fmt.Sprintf(FLOW_ID_POOL_PATH, PONRMgr.DeviceID, IntfID)
 	} else {
-		log.Error("Invalid resource pool identifier")
+		logger.Error("Invalid resource pool identifier")
 	}
 	return Path
 }
@@ -704,7 +704,7 @@
 	    alloc_id/gemport_id, onu_id or invalid type respectively
 	*/
 	if NumIDs < 1 {
-		log.Error("Invalid number of resources requested")
+		logger.Error("Invalid number of resources requested")
 		return nil, fmt.Errorf("Invalid number of resources requested %d", NumIDs)
 	}
 	// delegate to the master instance if sharing enabled across instances
@@ -713,34 +713,34 @@
 	if SharedResourceMgr != nil && PONRMgr != SharedResourceMgr {
 		return SharedResourceMgr.GetResourceID(ctx, IntfID, ResourceType, NumIDs)
 	}
-	log.Debugf("Fetching resource from %s rsrc mgr for resource %s", PONRMgr.Globalorlocal, ResourceType)
+	logger.Debugf("Fetching resource from %s rsrc mgr for resource %s", PONRMgr.Globalorlocal, ResourceType)
 
 	Path := PONRMgr.GetPath(IntfID, ResourceType)
 	if Path == "" {
-		log.Errorf("Failed to get path for resource type %s", ResourceType)
+		logger.Errorf("Failed to get path for resource type %s", ResourceType)
 		return nil, fmt.Errorf("Failed to get path for resource type %s", ResourceType)
 	}
-	log.Debugf("Get resource for type %s on path %s", ResourceType, Path)
+	logger.Debugf("Get resource for type %s on path %s", ResourceType, Path)
 	var Result []uint32
 	var NextID uint32
 	Resource, err := PONRMgr.GetResource(ctx, Path)
 	if (err == nil) && (ResourceType == ONU_ID) || (ResourceType == FLOW_ID) {
 		if NextID, err = PONRMgr.GenerateNextID(Resource); err != nil {
-			log.Error("Failed to Generate ID")
+			logger.Error("Failed to Generate ID")
 			return Result, err
 		}
 		Result = append(Result, NextID)
 	} else if (err == nil) && ((ResourceType == GEMPORT_ID) || (ResourceType == ALLOC_ID)) {
 		if NumIDs == 1 {
 			if NextID, err = PONRMgr.GenerateNextID(Resource); err != nil {
-				log.Error("Failed to Generate ID")
+				logger.Error("Failed to Generate ID")
 				return Result, err
 			}
 			Result = append(Result, NextID)
 		} else {
 			for NumIDs > 0 {
 				if NextID, err = PONRMgr.GenerateNextID(Resource); err != nil {
-					log.Error("Failed to Generate ID")
+					logger.Error("Failed to Generate ID")
 					return Result, err
 				}
 				Result = append(Result, NextID)
@@ -748,13 +748,13 @@
 			}
 		}
 	} else {
-		log.Error("get resource failed")
+		logger.Error("get resource failed")
 		return Result, err
 	}
 
 	//Update resource in kv store
 	if PONRMgr.UpdateResource(ctx, Path, Resource) != nil {
-		log.Errorf("Failed to update resource %s", Path)
+		logger.Errorf("Failed to update resource %s", Path)
 		return nil, fmt.Errorf("Failed to update resource %s", Path)
 	}
 	return Result, nil
@@ -780,11 +780,11 @@
 	   :return boolean: True if all IDs in given release_content release else False
 	*/
 	if !checkValidResourceType(ResourceType) {
-		log.Error("Invalid resource type")
+		logger.Error("Invalid resource type")
 		return false
 	}
 	if ReleaseContent == nil {
-		log.Debug("Nothing to release")
+		logger.Debug("Nothing to release")
 		return true
 	}
 	// delegate to the master instance if sharing enabled across instances
@@ -794,19 +794,19 @@
 	}
 	Path := PONRMgr.GetPath(IntfID, ResourceType)
 	if Path == "" {
-		log.Error("Failed to get path")
+		logger.Error("Failed to get path")
 		return false
 	}
 	Resource, err := PONRMgr.GetResource(ctx, Path)
 	if err != nil {
-		log.Error("Failed to get resource")
+		logger.Error("Failed to get resource")
 		return false
 	}
 	for _, Val := range ReleaseContent {
 		PONRMgr.ReleaseID(Resource, Val)
 	}
 	if PONRMgr.UpdateResource(ctx, Path, Resource) != nil {
-		log.Errorf("Free resource for %s failed", Path)
+		logger.Errorf("Free resource for %s failed", Path)
 		return false
 	}
 	return true
@@ -822,12 +822,12 @@
 	// TODO resource[POOL] = resource[POOL].bin
 	Value, err := json.Marshal(Resource)
 	if err != nil {
-		log.Error("failed to Marshal")
+		logger.Error("failed to Marshal")
 		return err
 	}
 	err = PONRMgr.KVStore.Put(ctx, Path, Value)
 	if err != nil {
-		log.Error("failed to put data to kv store %s", Path)
+		logger.Error("failed to put data to kv store %s", Path)
 		return err
 	}
 	return nil
@@ -846,15 +846,15 @@
 	}
 	Path := PONRMgr.GetPath(contIntfID, ResourceType)
 	if Path == "" {
-		log.Error("Failed to get path")
+		logger.Error("Failed to get path")
 		return false
 	}
 
 	if err := PONRMgr.KVStore.Delete(ctx, Path); err != nil {
-		log.Errorf("Failed to delete resource %s", Path)
+		logger.Errorf("Failed to delete resource %s", Path)
 		return false
 	}
-	log.Debugf("Cleared resource %s", Path)
+	logger.Debugf("Cleared resource %s", Path)
 	return true
 }
 
@@ -868,7 +868,7 @@
 	var AllocIDs []byte
 	Result := PONRMgr.KVStore.Put(ctx, AllocIDPath, AllocIDs)
 	if Result != nil {
-		log.Error("Failed to update the KV store")
+		logger.Error("Failed to update the KV store")
 		return
 	}
 	// initialize pon_intf_onu_id tuple to gemport_ids map
@@ -876,7 +876,7 @@
 	var GEMPortIDs []byte
 	Result = PONRMgr.KVStore.Put(ctx, GEMPortIDPath, GEMPortIDs)
 	if Result != nil {
-		log.Error("Failed to update the KV store")
+		logger.Error("Failed to update the KV store")
 		return
 	}
 }
@@ -890,14 +890,14 @@
 	var err error
 	AllocIDPath := fmt.Sprintf(ALLOC_ID_RESOURCE_MAP_PATH, PONRMgr.DeviceID, PONIntfONUID)
 	if err = PONRMgr.KVStore.Delete(ctx, AllocIDPath); err != nil {
-		log.Errorf("Failed to remove resource %s", AllocIDPath)
+		logger.Errorf("Failed to remove resource %s", AllocIDPath)
 		return false
 	}
 	// remove pon_intf_onu_id tuple to gemport_ids map
 	GEMPortIDPath := fmt.Sprintf(GEMPORT_ID_RESOURCE_MAP_PATH, PONRMgr.DeviceID, PONIntfONUID)
 	err = PONRMgr.KVStore.Delete(ctx, GEMPortIDPath)
 	if err != nil {
-		log.Errorf("Failed to remove resource %s", GEMPortIDPath)
+		logger.Errorf("Failed to remove resource %s", GEMPortIDPath)
 		return false
 	}
 
@@ -906,14 +906,14 @@
 		for _, Flow := range FlowIDs {
 			FlowIDInfoPath := fmt.Sprintf(FLOW_ID_INFO_PATH, PONRMgr.DeviceID, PONIntfONUID, Flow.Value)
 			if err = PONRMgr.KVStore.Delete(ctx, FlowIDInfoPath); err != nil {
-				log.Errorf("Failed to remove resource %s", FlowIDInfoPath)
+				logger.Errorf("Failed to remove resource %s", FlowIDInfoPath)
 				return false
 			}
 		}
 	}
 
 	if err = PONRMgr.KVStore.Delete(ctx, FlowIDPath); err != nil {
-		log.Errorf("Failed to remove resource %s", FlowIDPath)
+		logger.Errorf("Failed to remove resource %s", FlowIDPath)
 		return false
 	}
 
@@ -934,11 +934,11 @@
 		if Value != nil {
 			Val, err := ToByte(Value.Value)
 			if err != nil {
-				log.Errorw("Failed to convert into byte array", log.Fields{"error": err})
+				logger.Errorw("Failed to convert into byte array", log.Fields{"error": err})
 				return Data
 			}
 			if err = json.Unmarshal(Val, &Data); err != nil {
-				log.Error("Failed to unmarshal", log.Fields{"error": err})
+				logger.Error("Failed to unmarshal", log.Fields{"error": err})
 				return Data
 			}
 		}
@@ -954,19 +954,19 @@
 	*/
 
 	Path := fmt.Sprintf(GEMPORT_ID_RESOURCE_MAP_PATH, PONRMgr.DeviceID, IntfONUID)
-	log.Debugf("Getting current gemports for %s", Path)
+	logger.Debugf("Getting current gemports for %s", Path)
 	var Data []uint32
 	Value, err := PONRMgr.KVStore.Get(ctx, Path)
 	if err == nil {
 		if Value != nil {
 			Val, _ := ToByte(Value.Value)
 			if err = json.Unmarshal(Val, &Data); err != nil {
-				log.Errorw("Failed to unmarshal", log.Fields{"error": err})
+				logger.Errorw("Failed to unmarshal", log.Fields{"error": err})
 				return Data
 			}
 		}
 	} else {
-		log.Errorf("Failed to get data from kvstore for %s", Path)
+		logger.Errorf("Failed to get data from kvstore for %s", Path)
 	}
 	return Data
 }
@@ -986,7 +986,7 @@
 		if Value != nil {
 			Val, _ := ToByte(Value.Value)
 			if err = json.Unmarshal(Val, &Data); err != nil {
-				log.Error("Failed to unmarshal")
+				logger.Error("Failed to unmarshal")
 				return Data
 			}
 		}
@@ -1010,11 +1010,11 @@
 		if Value != nil {
 			Val, err := ToByte(Value.Value)
 			if err != nil {
-				log.Errorw("Failed to convert flowinfo into byte array", log.Fields{"error": err})
+				logger.Errorw("Failed to convert flowinfo into byte array", log.Fields{"error": err})
 				return err
 			}
 			if err = json.Unmarshal(Val, Data); err != nil {
-				log.Errorw("Failed to unmarshal", log.Fields{"error": err})
+				logger.Errorw("Failed to unmarshal", log.Fields{"error": err})
 				return err
 			}
 		}
@@ -1031,7 +1031,7 @@
 	Path := fmt.Sprintf(FLOW_ID_INFO_PATH, PONRMgr.DeviceID, IntfONUID, FlowID)
 
 	if err := PONRMgr.KVStore.Delete(ctx, Path); err != nil {
-		log.Errorf("Falied to remove resource %s", Path)
+		logger.Errorf("Falied to remove resource %s", Path)
 		return false
 	}
 	return true
@@ -1048,12 +1048,12 @@
 	Path := fmt.Sprintf(ALLOC_ID_RESOURCE_MAP_PATH, PONRMgr.DeviceID, IntfONUID)
 	Value, err = json.Marshal(AllocIDs)
 	if err != nil {
-		log.Error("failed to Marshal")
+		logger.Error("failed to Marshal")
 		return err
 	}
 
 	if err = PONRMgr.KVStore.Put(ctx, Path, Value); err != nil {
-		log.Errorf("Failed to update resource %s", Path)
+		logger.Errorf("Failed to update resource %s", Path)
 		return err
 	}
 	return err
@@ -1069,15 +1069,15 @@
 	var Value []byte
 	var err error
 	Path := fmt.Sprintf(GEMPORT_ID_RESOURCE_MAP_PATH, PONRMgr.DeviceID, IntfONUID)
-	log.Debugf("Updating gemport ids for %s", Path)
+	logger.Debugf("Updating gemport ids for %s", Path)
 	Value, err = json.Marshal(GEMPortIDs)
 	if err != nil {
-		log.Error("failed to Marshal")
+		logger.Error("failed to Marshal")
 		return err
 	}
 
 	if err = PONRMgr.KVStore.Put(ctx, Path, Value); err != nil {
-		log.Errorf("Failed to update resource %s", Path)
+		logger.Errorf("Failed to update resource %s", Path)
 		return err
 	}
 	return err
@@ -1128,12 +1128,12 @@
 	}
 	Value, err = json.Marshal(FlowIDs)
 	if err != nil {
-		log.Error("Failed to Marshal")
+		logger.Error("Failed to Marshal")
 		return err
 	}
 
 	if err = PONRMgr.KVStore.Put(ctx, Path, Value); err != nil {
-		log.Errorf("Failed to update resource %s", Path)
+		logger.Errorf("Failed to update resource %s", Path)
 		return err
 	}
 	return err
@@ -1152,12 +1152,12 @@
 	Path := fmt.Sprintf(FLOW_ID_INFO_PATH, PONRMgr.DeviceID, IntfONUID, FlowID)
 	Value, err = json.Marshal(FlowData)
 	if err != nil {
-		log.Error("failed to Marshal")
+		logger.Error("failed to Marshal")
 		return err
 	}
 
 	if err = PONRMgr.KVStore.Put(ctx, Path, Value); err != nil {
-		log.Errorf("Failed to update resource %s", Path)
+		logger.Errorf("Failed to update resource %s", Path)
 		return err
 	}
 	return err
@@ -1171,12 +1171,12 @@
 	*/
 	ByteArray, err := ToByte(Resource[POOL])
 	if err != nil {
-		log.Error("Failed to convert resource to byte array")
+		logger.Error("Failed to convert resource to byte array")
 		return 0, err
 	}
 	Data := bitmap.TSFromData(ByteArray, false)
 	if Data == nil {
-		log.Error("Failed to get data from byte array")
+		logger.Error("Failed to get data from byte array")
 		return 0, errors.New("Failed to get data from byte array")
 	}
 
@@ -1190,7 +1190,7 @@
 	Data.Set(Idx, true)
 	res := uint32(Resource[START_IDX].(float64))
 	Resource[POOL] = Data.Data(false)
-	log.Debugf("Generated ID for %d", (uint32(Idx) + res))
+	logger.Debugf("Generated ID for %d", (uint32(Idx) + res))
 	return (uint32(Idx) + res), err
 }
 
@@ -1202,12 +1202,12 @@
 	*/
 	ByteArray, err := ToByte(Resource[POOL])
 	if err != nil {
-		log.Error("Failed to convert resource to byte array")
+		logger.Error("Failed to convert resource to byte array")
 		return false
 	}
 	Data := bitmap.TSFromData(ByteArray, false)
 	if Data == nil {
-		log.Error("Failed to get resource pool")
+		logger.Error("Failed to get resource pool")
 		return false
 	}
 	Idx := Id - uint32(Resource[START_IDX].(float64))
@@ -1224,7 +1224,7 @@
 func (PONRMgr *PONResourceManager) reserveID(TSData *bitmap.Threadsafe, StartIndex uint32, Id uint32) bool {
 	Data := bitmap.TSFromData(TSData.Data(false), false)
 	if Data == nil {
-		log.Error("Failed to get resource pool")
+		logger.Error("Failed to get resource pool")
 		return false
 	}
 	Idx := Id - StartIndex
@@ -1281,12 +1281,12 @@
 	Path := fmt.Sprintf(ONU_GEM_INFO_PATH, PONRMgr.DeviceID, intfID)
 	Value, err = json.Marshal(onuGemData)
 	if err != nil {
-		log.Error("failed to Marshal")
+		logger.Error("failed to Marshal")
 		return err
 	}
 
 	if err = PONRMgr.KVStore.Put(ctx, Path, Value); err != nil {
-		log.Errorf("Failed to update resource %s", Path)
+		logger.Errorf("Failed to update resource %s", Path)
 		return err
 	}
 	return err
@@ -1303,22 +1303,22 @@
 	path := fmt.Sprintf(ONU_GEM_INFO_PATH, PONRMgr.DeviceID, IntfId)
 	value, err := PONRMgr.KVStore.Get(ctx, path)
 	if err != nil {
-		log.Errorw("Failed to get from kv store", log.Fields{"path": path})
+		logger.Errorw("Failed to get from kv store", log.Fields{"path": path})
 		return err
 	} else if value == nil {
-		log.Debug("No onuinfo for path", log.Fields{"path": path})
+		logger.Debug("No onuinfo for path", log.Fields{"path": path})
 		return nil // returning nil as this could happen if there are no onus for the interface yet
 	}
 	if Val, err = kvstore.ToByte(value.Value); err != nil {
-		log.Error("Failed to convert to byte array")
+		logger.Error("Failed to convert to byte array")
 		return err
 	}
 
 	if err = json.Unmarshal(Val, &onuGemInfo); err != nil {
-		log.Error("Failed to unmarshall")
+		logger.Error("Failed to unmarshall")
 		return err
 	}
-	log.Debugw("found onuinfo from path", log.Fields{"path": path, "onuinfo": onuGemInfo})
+	logger.Debugw("found onuinfo from path", log.Fields{"path": path, "onuinfo": onuGemInfo})
 	return err
 }
 
@@ -1330,7 +1330,7 @@
 
 	path := fmt.Sprintf(ONU_GEM_INFO_PATH, PONRMgr.DeviceID, intfId)
 	if err := PONRMgr.KVStore.Delete(ctx, path); err != nil {
-		log.Errorf("Falied to remove resource %s", path)
+		logger.Errorf("Falied to remove resource %s", path)
 		return err
 	}
 	return nil
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/common.go
new file mode 100644
index 0000000..211419d
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/common.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package probe
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "probe"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/probe.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/probe.go
index 932c287..e89d5bc 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/probe.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/probe/probe.go
@@ -118,7 +118,7 @@
 	for _, name := range names {
 		if _, ok := p.status[name]; !ok {
 			p.status[name] = ServiceStatusUnknown
-			log.Debugw("probe-service-registered", log.Fields{"service-name": name})
+			logger.Debugw("probe-service-registered", log.Fields{"service-name": name})
 		}
 	}
 
@@ -161,7 +161,7 @@
 	} else {
 		p.isHealthy = defaultHealthFunc(p.status)
 	}
-	log.Debugw("probe-service-status-updated",
+	logger.Debugw("probe-service-status-updated",
 		log.Fields{
 			"service-name": name,
 			"status":       status.String(),
@@ -232,21 +232,21 @@
 	defer p.mutex.RUnlock()
 	w.Header().Set("Content-Type", "application/json")
 	if _, err := w.Write([]byte("{")); err != nil {
-		log.Errorw("write-response", log.Fields{"error": err})
+		logger.Errorw("write-response", log.Fields{"error": err})
 		w.WriteHeader(http.StatusInternalServerError)
 		return
 	}
 	comma := ""
 	for c, s := range p.status {
 		if _, err := w.Write([]byte(fmt.Sprintf("%s\"%s\": \"%s\"", comma, c, s.String()))); err != nil {
-			log.Errorw("write-response", log.Fields{"error": err})
+			logger.Errorw("write-response", log.Fields{"error": err})
 			w.WriteHeader(http.StatusInternalServerError)
 			return
 		}
 		comma = ", "
 	}
 	if _, err := w.Write([]byte("}")); err != nil {
-		log.Errorw("write-response", log.Fields{"error": err})
+		logger.Errorw("write-response", log.Fields{"error": err})
 		w.WriteHeader(http.StatusInternalServerError)
 		return
 	}
@@ -269,7 +269,7 @@
 		Addr:    address,
 		Handler: mux,
 	}
-	log.Fatal(s.ListenAndServe())
+	logger.Fatal(s.ListenAndServe())
 }
 
 func (p *Probe) IsReady() bool {
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/README.md b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/README.md
index 03a396d..88d6564 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/README.md
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/README.md
@@ -158,13 +158,13 @@
 Assuming the Technology template is stored in a local file 4QueueHybridProfileMap1.json the following commands could be used to store or update the technical template into the proper location in the etcd key/value store:
 
 # Store a Technology template using etcdctl
-jq -c . 4QueueHybridProfileMap1.json | kubectl exec -i etcd-cluster-0000 -- etcdctl set service/voltha/technology_profiles/xgspon/64
+jq -c . 4QueueHybridProfileMap1.json | kubectl exec -i etcd-cluster-0000 -- etcdctl set service/voltha/technology_profiles/XGS-PON/64
 
-jq -c . 4QueueHybridProfileMap1.json |  etcdctl --endpoints=<ETCDIP>:2379 put service/voltha/technology_profiles/xgspon/64
+jq -c . 4QueueHybridProfileMap1.json |  etcdctl --endpoints=<ETCDIP>:2379 put service/voltha/technology_profiles/XGS-PON/64
 
 
 # Store a Technology template using curl
-curl -sSL -XPUT http://10.233.53.161:2379/v2/keys/service/voltha/technology_profiles/xgspon/64 -d value="$(jq -c . 4QueueHybridProfileMap1.json)"
+curl -sSL -XPUT http://10.233.53.161:2379/v2/keys/service/voltha/technology_profiles/XGS-PON/64 -d value="$(jq -c . 4QueueHybridProfileMap1.json)"
 In the examples above, the command jq is used. This command can be installed using standard package management tools on most Linux systems. In the examples the "-c" option is used to compress the JSON. Using this tool is not necessary, and if you choose not to use the tool, you can replace "jq -c ," in the above examples with the "cat" command. More on jq can be found at https://stedolan.github.io/jq/.
 
 Listing Technical Profiles for a given Technology
@@ -172,18 +172,18 @@
 
 
 #List Tech profile 
-etcdctl --endpoints=<EtcdIPAddres>:2379 get  service/voltha/technology_profiles/xgspon/64
+etcdctl --endpoints=<EtcdIPAddres>:2379 get  service/voltha/technology_profiles/XGS-PON/64
 
 
 # Example output
 A specified Technology profile can be viewed with the etcdctl get command. (Again, jq is used for presentation purposes, and is not required)
 
 # Display a specified Technology profile, using jq to pretty print
-kubectl exec -i etcd-cluster-0000 -- etcdctl get /xgspon/64 | jq .
+kubectl exec -i etcd-cluster-0000 -- etcdctl get service/voltha/technology_profiles/XGS-PON/64 | jq .
 
-etcdctl --endpoints=<ETCDIP>:2379 get  service/voltha/technology_profiles/xgspon/64
+etcdctl --endpoints=<ETCDIP>:2379 get  service/voltha/technology_profiles/XGS-PON/64
 # Example outpout
-service/voltha/technology_profiles/xgspon/64/uni-1
+service/voltha/technology_profiles/XGS-PON/64/uni-1
 {
   "name": "4QueueHybridProfileMap1",
   "profile_type": "XPON",
@@ -326,11 +326,19 @@
   ]
 }
 
-#Deleting Technology Profiles
+# Display a specified Technology profile instance, using jq to pretty print
+kubectl exec -i etcd-cluster-0000 -- etcdctl get service/voltha/technology_profiles/XGS-PON/64/pon-{0}/onu-{1}/uni-{0} | jq .
+
+etcdctl --endpoints=<ETCDIP>:2379 get  service/voltha/technology_profiles/XGS-PON/64/pon-{0}/onu-{1}/uni-{0}
+# Example outpout
+service/voltha/technology_profiles/XGS-PON/64/pon-{0}/onu-{1}/uni-{0}
+{"name":"Default_1tcont_1gem_Profile","subscriber_identifier":"pon-{0}/onu-{1}/uni-{0}","profile_type":"XGS-PON","version":1,"num_gem_ports":1,"instance_control":{"ONU":"multi-instance","uni":"single-instance","max_gem_payload_size":"auto"},"us_scheduler":{"alloc_id":1024,"direction":"UPSTREAM","additional_bw":"AdditionalBW_BestEffort","priority":0,"weight":0,"q_sched_policy":"Hybrid"},"ds_scheduler":{"alloc_id":1024,"direction":"DOWNSTREAM","additional_bw":"AdditionalBW_BestEffort","priority":0,"weight":0,"q_sched_policy":"Hybrid"},"upstream_gem_port_attribute_list":[{"gemport_id":1024,"max_q_size":"auto","pbit_map":"0b11111111","aes_encryption":"True","scheduling_policy":"WRR","priority_q":0,"weight":0,"discard_policy":"TailDrop","discard_config":{"min_threshold":0,"max_threshold":0,"max_probability":0},"is_multicast":"","dynamic_access_control_list":"","static_access_control_list":"","multicast_gem_id":0}],"downstream_gem_port_attribute_list":[{"gemport_id":1024,"max_q_size":"auto","pbit_map":"0b11111111","aes_encryption":"True","scheduling_policy":"WRR","priority_q":0,"weight":0,"discard_policy":"TailDrop","discard_config":{"min_threshold":0,"max_threshold":0,"max_probability":0},"is_multicast":"","dynamic_access_control_list":"","static_access_control_list":"","multicast_gem_id":0}]}
+
+# Deleting Technology Profiles
 A technology profile or a technology profile tree can be removed using etcdctl rm.
 
 # Remove a specific technology profile
-kubectl exec -i etcd-cluster-0000 -- etcdctl rm /xgspon/64
+kubectl exec -i etcd-cluster-0000 -- etcdctl rm /XGS-PON/64
 
 # Remove all technology profiles associated with Technology xgspon and ID 64(including the profile ID key)
-kubectl exec -i etcd-cluster-0000 -- etcdctl rm --dir -r /xgspon/64
+kubectl exec -i etcd-cluster-0000 -- etcdctl rm --dir -r /XGS-PON/64
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/common.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/common.go
new file mode 100644
index 0000000..42818f1
--- /dev/null
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/common.go
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2020-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package techprofile
+
+import (
+	"github.com/opencord/voltha-lib-go/v3/pkg/log"
+)
+
+var logger log.Logger
+
+func init() {
+	// Setup this package so that it's log level can be modified at run time
+	var err error
+	logger, err = log.AddPackage(log.JSON, log.ErrorLevel, log.Fields{"pkg": "techprofile"})
+	if err != nil {
+		panic(err)
+	}
+}
diff --git a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/tech_profile.go b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/tech_profile.go
index ba8855f..2c6e67b 100644
--- a/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/tech_profile.go
+++ b/vendor/github.com/opencord/voltha-lib-go/v3/pkg/techprofile/tech_profile.go
@@ -245,7 +245,7 @@
 	addr := t.config.KVStoreHost + ":" + strconv.Itoa(t.config.KVStorePort)
 	kvClient, err := newKVClient(t.config.KVStoreType, addr, t.config.KVStoreTimeout)
 	if err != nil {
-		log.Errorw("failed-to-create-kv-client",
+		logger.Errorw("failed-to-create-kv-client",
 			log.Fields{
 				"type": t.config.KVStoreType, "host": t.config.KVStoreHost, "port": t.config.KVStorePort,
 				"timeout": t.config.KVStoreTimeout, "prefix": t.config.TPKVPathPrefix,
@@ -270,7 +270,7 @@
 
 func newKVClient(storeType string, address string, timeout int) (kvstore.Client, error) {
 
-	log.Infow("kv-store", log.Fields{"storeType": storeType, "address": address})
+	logger.Infow("kv-store", log.Fields{"storeType": storeType, "address": address})
 	switch storeType {
 	case "consul":
 		return kvstore.NewConsulClient(address, timeout)
@@ -282,15 +282,15 @@
 
 func NewTechProfile(resourceMgr iPonResourceMgr, KVStoreType string, KVStoreHost string, KVStorePort int) (*TechProfileMgr, error) {
 	var techprofileObj TechProfileMgr
-	log.Debug("Initializing techprofile Manager")
+	logger.Debug("Initializing techprofile Manager")
 	techprofileObj.config = NewTechProfileFlags(KVStoreType, KVStoreHost, KVStorePort)
 	techprofileObj.config.KVBackend = techprofileObj.SetKVClient()
 	if techprofileObj.config.KVBackend == nil {
-		log.Error("Failed to initialize KV backend\n")
+		logger.Error("Failed to initialize KV backend\n")
 		return nil, errors.New("KV backend init failed")
 	}
 	techprofileObj.resourceMgr = resourceMgr
-	log.Debug("Initializing techprofile object instance success")
+	logger.Debug("Initializing techprofile object instance success")
 	return &techprofileObj, nil
 }
 
@@ -306,12 +306,12 @@
 
 	kvResult, _ = t.config.KVBackend.Get(ctx, path)
 	if kvResult == nil {
-		log.Infow("tp-instance-not-found-on-kv", log.Fields{"key": path})
+		logger.Infow("tp-instance-not-found-on-kv", log.Fields{"key": path})
 		return nil, nil
 	} else {
 		if value, err := kvstore.ToByte(kvResult.Value); err == nil {
 			if err = json.Unmarshal(value, resPtr); err != nil {
-				log.Errorw("error-unmarshal-kv-result", log.Fields{"key": path, "value": value})
+				logger.Errorw("error-unmarshal-kv-result", log.Fields{"key": path, "value": value})
 				return nil, errors.New("error-unmarshal-kv-result")
 			} else {
 				return resPtr, nil
@@ -323,35 +323,35 @@
 
 func (t *TechProfileMgr) addTechProfInstanceToKVStore(ctx context.Context, techProfiletblID uint32, uniPortName string, tpInstance *TechProfile) error {
 	path := t.GetTechProfileInstanceKVPath(techProfiletblID, uniPortName)
-	log.Debugw("Adding techprof instance to kvstore", log.Fields{"key": path, "tpinstance": tpInstance})
+	logger.Debugw("Adding techprof instance to kvstore", log.Fields{"key": path, "tpinstance": tpInstance})
 	tpInstanceJson, err := json.Marshal(*tpInstance)
 	if err == nil {
 		// Backend will convert JSON byte array into string format
-		log.Debugw("Storing tech profile instance to KV Store", log.Fields{"key": path, "val": tpInstanceJson})
+		logger.Debugw("Storing tech profile instance to KV Store", log.Fields{"key": path, "val": tpInstanceJson})
 		err = t.config.KVBackend.Put(ctx, path, tpInstanceJson)
 	} else {
-		log.Errorw("Error in marshaling into Json format", log.Fields{"key": path, "tpinstance": tpInstance})
+		logger.Errorw("Error in marshaling into Json format", log.Fields{"key": path, "tpinstance": tpInstance})
 	}
 	return err
 }
 func (t *TechProfileMgr) getTPFromKVStore(ctx context.Context, techProfiletblID uint32) *DefaultTechProfile {
 	var kvtechprofile DefaultTechProfile
 	key := fmt.Sprintf(t.config.TPFileKVPath, t.resourceMgr.GetTechnology(), techProfiletblID)
-	log.Debugw("Getting techprofile from KV store", log.Fields{"techProfiletblID": techProfiletblID, "Key": key})
+	logger.Debugw("Getting techprofile from KV store", log.Fields{"techProfiletblID": techProfiletblID, "Key": key})
 	kvresult, err := t.config.KVBackend.Get(ctx, key)
 	if err != nil {
-		log.Errorw("Error while fetching value from KV store", log.Fields{"key": key})
+		logger.Errorw("Error while fetching value from KV store", log.Fields{"key": key})
 		return nil
 	}
 	if kvresult != nil {
 		/* Backend will return Value in string format,needs to be converted to []byte before unmarshal*/
 		if value, err := kvstore.ToByte(kvresult.Value); err == nil {
 			if err = json.Unmarshal(value, &kvtechprofile); err != nil {
-				log.Errorw("Error unmarshaling techprofile fetched from KV store", log.Fields{"techProfiletblID": techProfiletblID, "error": err, "techprofile_json": value})
+				logger.Errorw("Error unmarshaling techprofile fetched from KV store", log.Fields{"techProfiletblID": techProfiletblID, "error": err, "techprofile_json": value})
 				return nil
 			}
 
-			log.Debugw("Success fetched techprofile from KV store", log.Fields{"techProfiletblID": techProfiletblID, "value": kvtechprofile})
+			logger.Debugw("Success fetched techprofile from KV store", log.Fields{"techProfiletblID": techProfiletblID, "value": kvtechprofile})
 			return &kvtechprofile
 		}
 	}
@@ -360,36 +360,36 @@
 
 func (t *TechProfileMgr) CreateTechProfInstance(ctx context.Context, techProfiletblID uint32, uniPortName string, intfId uint32) (*TechProfile, error) {
 	var tpInstance *TechProfile
-	log.Infow("creating-tp-instance", log.Fields{"tableid": techProfiletblID, "uni": uniPortName, "intId": intfId})
+	logger.Infow("creating-tp-instance", log.Fields{"tableid": techProfiletblID, "uni": uniPortName, "intId": intfId})
 
 	// Make sure the uniPortName is as per format pon-{[0-9]+}/onu-{[0-9]+}/uni-{[0-9]+}
 	if !uniPortNameFormat.Match([]byte(uniPortName)) {
-		log.Errorw("uni-port-name-not-confirming-to-format", log.Fields{"uniPortName": uniPortName})
+		logger.Errorw("uni-port-name-not-confirming-to-format", log.Fields{"uniPortName": uniPortName})
 		return nil, errors.New("uni-port-name-not-confirming-to-format")
 	}
 
 	tp := t.getTPFromKVStore(ctx, techProfiletblID)
 	if tp != nil {
 		if err := t.validateInstanceControlAttr(tp.InstanceCtrl); err != nil {
-			log.Error("invalid-instance-ctrl-attr--using-default-tp")
+			logger.Error("invalid-instance-ctrl-attr--using-default-tp")
 			tp = t.getDefaultTechProfile()
 		} else {
-			log.Infow("using-specified-tp-from-kv-store", log.Fields{"tpid": techProfiletblID})
+			logger.Infow("using-specified-tp-from-kv-store", log.Fields{"tpid": techProfiletblID})
 		}
 	} else {
-		log.Info("tp-not-found-on-kv--creating-default-tp")
+		logger.Info("tp-not-found-on-kv--creating-default-tp")
 		tp = t.getDefaultTechProfile()
 	}
 	tpInstancePath := t.GetTechProfileInstanceKVPath(techProfiletblID, uniPortName)
 	if tpInstance = t.allocateTPInstance(ctx, uniPortName, tp, intfId, tpInstancePath); tpInstance == nil {
-		log.Error("tp-intance-allocation-failed")
+		logger.Error("tp-intance-allocation-failed")
 		return nil, errors.New("tp-intance-allocation-failed")
 	}
 	if err := t.addTechProfInstanceToKVStore(ctx, techProfiletblID, uniPortName, tpInstance); err != nil {
-		log.Errorw("error-adding-tp-to-kv-store", log.Fields{"tableid": techProfiletblID, "uni": uniPortName})
+		logger.Errorw("error-adding-tp-to-kv-store", log.Fields{"tableid": techProfiletblID, "uni": uniPortName})
 		return nil, errors.New("error-adding-tp-to-kv-store")
 	}
-	log.Infow("tp-added-to-kv-store-successfully",
+	logger.Infow("tp-added-to-kv-store-successfully",
 		log.Fields{"tpid": techProfiletblID, "uni": uniPortName, "intfId": intfId})
 	return tpInstance, nil
 }
@@ -401,17 +401,17 @@
 
 func (t *TechProfileMgr) validateInstanceControlAttr(instCtl InstanceControl) error {
 	if instCtl.Onu != "single-instance" && instCtl.Onu != "multi-instance" {
-		log.Errorw("invalid-onu-instance-control-attribute", log.Fields{"onu-inst": instCtl.Onu})
+		logger.Errorw("invalid-onu-instance-control-attribute", log.Fields{"onu-inst": instCtl.Onu})
 		return errors.New("invalid-onu-instance-ctl-attr")
 	}
 
 	if instCtl.Uni != "single-instance" && instCtl.Uni != "multi-instance" {
-		log.Errorw("invalid-uni-instance-control-attribute", log.Fields{"uni-inst": instCtl.Uni})
+		logger.Errorw("invalid-uni-instance-control-attribute", log.Fields{"uni-inst": instCtl.Uni})
 		return errors.New("invalid-uni-instance-ctl-attr")
 	}
 
 	if instCtl.Uni == "multi-instance" {
-		log.Error("uni-multi-instance-tp-not-supported")
+		logger.Error("uni-multi-instance-tp-not-supported")
 		return errors.New("uni-multi-instance-tp-not-supported")
 	}
 
@@ -428,22 +428,22 @@
 	var gemPorts []uint32
 	var err error
 
-	log.Infow("Allocating TechProfileMgr instance from techprofile template", log.Fields{"uniPortName": uniPortName, "intfId": intfId, "numGem": tp.NumGemPorts})
+	logger.Infow("Allocating TechProfileMgr instance from techprofile template", log.Fields{"uniPortName": uniPortName, "intfId": intfId, "numGem": tp.NumGemPorts})
 
 	if tp.InstanceCtrl.Onu == "multi-instance" {
 		if tcontIDs, err = t.resourceMgr.GetResourceID(ctx, intfId, t.resourceMgr.GetResourceTypeAllocID(), 1); err != nil {
-			log.Errorw("Error getting alloc id from rsrcrMgr", log.Fields{"intfId": intfId})
+			logger.Errorw("Error getting alloc id from rsrcrMgr", log.Fields{"intfId": intfId})
 			return nil
 		}
 	} else { // "single-instance"
 		if tpInst, err := t.getSingleInstanceTp(ctx, tpInstPath); err != nil {
-			log.Errorw("Error getting alloc id from rsrcrMgr", log.Fields{"intfId": intfId})
+			logger.Errorw("Error getting alloc id from rsrcrMgr", log.Fields{"intfId": intfId})
 			return nil
 		} else if tpInst == nil {
 			// No "single-instance" tp found on one any uni port for the given TP ID
 			// Allocate a new TcontID or AllocID
 			if tcontIDs, err = t.resourceMgr.GetResourceID(ctx, intfId, t.resourceMgr.GetResourceTypeAllocID(), 1); err != nil {
-				log.Errorw("Error getting alloc id from rsrcrMgr", log.Fields{"intfId": intfId})
+				logger.Errorw("Error getting alloc id from rsrcrMgr", log.Fields{"intfId": intfId})
 				return nil
 			}
 		} else {
@@ -451,12 +451,12 @@
 			tcontIDs = append(tcontIDs, tpInst.UsScheduler.AllocID)
 		}
 	}
-	log.Debugw("Num GEM ports in TP:", log.Fields{"NumGemPorts": tp.NumGemPorts})
+	logger.Debugw("Num GEM ports in TP:", log.Fields{"NumGemPorts": tp.NumGemPorts})
 	if gemPorts, err = t.resourceMgr.GetResourceID(ctx, intfId, t.resourceMgr.GetResourceTypeGemPortID(), tp.NumGemPorts); err != nil {
-		log.Errorw("Error getting gemport ids from rsrcrMgr", log.Fields{"intfId": intfId, "numGemports": tp.NumGemPorts})
+		logger.Errorw("Error getting gemport ids from rsrcrMgr", log.Fields{"intfId": intfId, "numGemports": tp.NumGemPorts})
 		return nil
 	}
-	log.Infow("Allocated tconts and GEM ports successfully", log.Fields{"tconts": tcontIDs, "gemports": gemPorts})
+	logger.Infow("Allocated tconts and GEM ports successfully", log.Fields{"tconts": tcontIDs, "gemports": gemPorts})
 	for index := 0; index < int(tp.NumGemPorts); index++ {
 		usGemPortAttributeList = append(usGemPortAttributeList,
 			iGemPortAttribute{GemportID: gemPorts[index],
@@ -470,7 +470,7 @@
 				DiscardConfig:    tp.UpstreamGemPortAttributeList[index].DiscardConfig})
 	}
 
-	log.Info("length of DownstreamGemPortAttributeList", len(tp.DownstreamGemPortAttributeList))
+	logger.Info("length of DownstreamGemPortAttributeList", len(tp.DownstreamGemPortAttributeList))
 	//put multicast and unicast downstream GEM port attributes in different lists first
 	for index := 0; index < int(len(tp.DownstreamGemPortAttributeList)); index++ {
 		if isMulticastGem(tp.DownstreamGemPortAttributeList[index].IsMulticast) {
@@ -559,10 +559,10 @@
 	for keyPath, kvPair := range kvPairs {
 		if value, err := kvstore.ToByte(kvPair.Value); err == nil {
 			if err = json.Unmarshal(value, &tpInst); err != nil {
-				log.Errorw("error-unmarshal-kv-pair", log.Fields{"keyPath": keyPath, "value": value})
+				logger.Errorw("error-unmarshal-kv-pair", log.Fields{"keyPath": keyPath, "value": value})
 				return nil, errors.New("error-unmarshal-kv-pair")
 			} else {
-				log.Debugw("found-valid-tp-instance-on-another-uni", log.Fields{"keyPath": keyPath})
+				logger.Debugw("found-valid-tp-instance-on-another-uni", log.Fields{"keyPath": keyPath})
 				return &tpInst, nil
 			}
 		}
@@ -576,7 +576,7 @@
 	var dsGemPortAttributeList []GemPortAttribute
 
 	for _, pbit := range t.config.DefaultPbits {
-		log.Debugw("Creating GEM port", log.Fields{"pbit": pbit})
+		logger.Debugw("Creating GEM port", log.Fields{"pbit": pbit})
 		usGemPortAttributeList = append(usGemPortAttributeList,
 			GemPortAttribute{
 				MaxQueueSize:     defaultMaxQueueSize,
@@ -651,7 +651,7 @@
 	} else if paramType == "sched_policy" {
 		for key, val := range tp_pb.SchedulingPolicy_value {
 			if key == paramKey {
-				log.Debugw("Got value in proto", log.Fields{"key": key, "value": val})
+				logger.Debugw("Got value in proto", log.Fields{"key": key, "value": val})
 				result = val
 			}
 		}
@@ -662,29 +662,29 @@
 			}
 		}
 	} else {
-		log.Error("Could not find proto parameter", log.Fields{"paramType": paramType, "key": paramKey})
+		logger.Error("Could not find proto parameter", log.Fields{"paramType": paramType, "key": paramKey})
 		return -1
 	}
-	log.Debugw("Got value in proto", log.Fields{"key": paramKey, "value": result})
+	logger.Debugw("Got value in proto", log.Fields{"key": paramKey, "value": result})
 	return result
 }
 
 func (t *TechProfileMgr) GetUsScheduler(tpInstance *TechProfile) (*tp_pb.SchedulerConfig, error) {
 	dir := tp_pb.Direction(t.GetprotoBufParamValue("direction", tpInstance.UsScheduler.Direction))
 	if dir == -1 {
-		log.Errorf("Error in getting proto id for direction %s for upstream scheduler", tpInstance.UsScheduler.Direction)
+		logger.Errorf("Error in getting proto id for direction %s for upstream scheduler", tpInstance.UsScheduler.Direction)
 		return nil, fmt.Errorf("unable to get proto id for direction %s for upstream scheduler", tpInstance.UsScheduler.Direction)
 	}
 
 	bw := tp_pb.AdditionalBW(t.GetprotoBufParamValue("additional_bw", tpInstance.UsScheduler.AdditionalBw))
 	if bw == -1 {
-		log.Errorf("Error in getting proto id for bandwidth %s for upstream scheduler", tpInstance.UsScheduler.AdditionalBw)
+		logger.Errorf("Error in getting proto id for bandwidth %s for upstream scheduler", tpInstance.UsScheduler.AdditionalBw)
 		return nil, fmt.Errorf("unable to get proto id for bandwidth %s for upstream scheduler", tpInstance.UsScheduler.AdditionalBw)
 	}
 
 	policy := tp_pb.SchedulingPolicy(t.GetprotoBufParamValue("sched_policy", tpInstance.UsScheduler.QSchedPolicy))
 	if policy == -1 {
-		log.Errorf("Error in getting proto id for scheduling policy %s for upstream scheduler", tpInstance.UsScheduler.QSchedPolicy)
+		logger.Errorf("Error in getting proto id for scheduling policy %s for upstream scheduler", tpInstance.UsScheduler.QSchedPolicy)
 		return nil, fmt.Errorf("unable to get proto id for scheduling policy %s for upstream scheduler", tpInstance.UsScheduler.QSchedPolicy)
 	}
 
@@ -700,19 +700,19 @@
 
 	dir := tp_pb.Direction(t.GetprotoBufParamValue("direction", tpInstance.DsScheduler.Direction))
 	if dir == -1 {
-		log.Errorf("Error in getting proto id for direction %s for downstream scheduler", tpInstance.DsScheduler.Direction)
+		logger.Errorf("Error in getting proto id for direction %s for downstream scheduler", tpInstance.DsScheduler.Direction)
 		return nil, fmt.Errorf("unable to get proto id for direction %s for downstream scheduler", tpInstance.DsScheduler.Direction)
 	}
 
 	bw := tp_pb.AdditionalBW(t.GetprotoBufParamValue("additional_bw", tpInstance.DsScheduler.AdditionalBw))
 	if bw == -1 {
-		log.Errorf("Error in getting proto id for bandwidth %s for downstream scheduler", tpInstance.DsScheduler.AdditionalBw)
+		logger.Errorf("Error in getting proto id for bandwidth %s for downstream scheduler", tpInstance.DsScheduler.AdditionalBw)
 		return nil, fmt.Errorf("unable to get proto id for bandwidth %s for downstream scheduler", tpInstance.DsScheduler.AdditionalBw)
 	}
 
 	policy := tp_pb.SchedulingPolicy(t.GetprotoBufParamValue("sched_policy", tpInstance.DsScheduler.QSchedPolicy))
 	if policy == -1 {
-		log.Errorf("Error in getting proto id for scheduling policy %s for downstream scheduler", tpInstance.DsScheduler.QSchedPolicy)
+		logger.Errorf("Error in getting proto id for scheduling policy %s for downstream scheduler", tpInstance.DsScheduler.QSchedPolicy)
 		return nil, fmt.Errorf("unable to get proto id for scheduling policy %s for downstream scheduler", tpInstance.DsScheduler.QSchedPolicy)
 	}
 
@@ -752,13 +752,13 @@
 
 			schedPolicy := tpm.GetprotoBufParamValue("sched_policy", tp.UpstreamGemPortAttributeList[Count].SchedulingPolicy)
 			if schedPolicy == -1 {
-				log.Errorf("Error in getting Proto Id for scheduling policy %s for Upstream Gem Port %d", tp.UpstreamGemPortAttributeList[Count].SchedulingPolicy, Count)
+				logger.Errorf("Error in getting Proto Id for scheduling policy %s for Upstream Gem Port %d", tp.UpstreamGemPortAttributeList[Count].SchedulingPolicy, Count)
 				return nil, fmt.Errorf("upstream gem port traffic queue creation failed due to unrecognized scheduling policy %s", tp.UpstreamGemPortAttributeList[Count].SchedulingPolicy)
 			}
 
 			discardPolicy := tpm.GetprotoBufParamValue("discard_policy", tp.UpstreamGemPortAttributeList[Count].DiscardPolicy)
 			if discardPolicy == -1 {
-				log.Errorf("Error in getting Proto Id for discard policy %s for Upstream Gem Port %d", tp.UpstreamGemPortAttributeList[Count].DiscardPolicy, Count)
+				logger.Errorf("Error in getting Proto Id for discard policy %s for Upstream Gem Port %d", tp.UpstreamGemPortAttributeList[Count].DiscardPolicy, Count)
 				return nil, fmt.Errorf("upstream gem port traffic queue creation failed due to unrecognized discard policy %s", tp.UpstreamGemPortAttributeList[Count].DiscardPolicy)
 			}
 
@@ -773,7 +773,7 @@
 				DiscardPolicy: tp_pb.DiscardPolicy(discardPolicy),
 			})
 		}
-		log.Debugw("Upstream Traffic queue list ", log.Fields{"queuelist": GemPorts})
+		logger.Debugw("Upstream Traffic queue list ", log.Fields{"queuelist": GemPorts})
 		return GemPorts, nil
 	} else if Dir == tp_pb.Direction_DOWNSTREAM {
 		//downstream GEM ports
@@ -792,13 +792,13 @@
 
 			schedPolicy := tpm.GetprotoBufParamValue("sched_policy", tp.DownstreamGemPortAttributeList[Count].SchedulingPolicy)
 			if schedPolicy == -1 {
-				log.Errorf("Error in getting Proto Id for scheduling policy %s for Downstream Gem Port %d", tp.DownstreamGemPortAttributeList[Count].SchedulingPolicy, Count)
+				logger.Errorf("Error in getting Proto Id for scheduling policy %s for Downstream Gem Port %d", tp.DownstreamGemPortAttributeList[Count].SchedulingPolicy, Count)
 				return nil, fmt.Errorf("downstream gem port traffic queue creation failed due to unrecognized scheduling policy %s", tp.DownstreamGemPortAttributeList[Count].SchedulingPolicy)
 			}
 
 			discardPolicy := tpm.GetprotoBufParamValue("discard_policy", tp.DownstreamGemPortAttributeList[Count].DiscardPolicy)
 			if discardPolicy == -1 {
-				log.Errorf("Error in getting Proto Id for discard policy %s for Downstream Gem Port %d", tp.DownstreamGemPortAttributeList[Count].DiscardPolicy, Count)
+				logger.Errorf("Error in getting Proto Id for discard policy %s for Downstream Gem Port %d", tp.DownstreamGemPortAttributeList[Count].DiscardPolicy, Count)
 				return nil, fmt.Errorf("downstream gem port traffic queue creation failed due to unrecognized discard policy %s", tp.DownstreamGemPortAttributeList[Count].DiscardPolicy)
 			}
 
@@ -813,11 +813,11 @@
 				DiscardPolicy: tp_pb.DiscardPolicy(discardPolicy),
 			})
 		}
-		log.Debugw("Downstream Traffic queue list ", log.Fields{"queuelist": GemPorts})
+		logger.Debugw("Downstream Traffic queue list ", log.Fields{"queuelist": GemPorts})
 		return GemPorts, nil
 	}
 
-	log.Errorf("Unsupported direction %s used for generating Traffic Queue list", Dir)
+	logger.Errorf("Unsupported direction %s used for generating Traffic Queue list", Dir)
 	return nil, fmt.Errorf("downstream gem port traffic queue creation failed due to unsupported direction %s", Dir)
 }
 
@@ -851,7 +851,7 @@
 			DiscardPolicy: tp_pb.DiscardPolicy(tpm.GetprotoBufParamValue("discard_policy", tp.DownstreamGemPortAttributeList[Count].DiscardPolicy)),
 		})
 	}
-	log.Debugw("Downstream Multicast Traffic queue list ", log.Fields{"queuelist": mcastTrafficQueues})
+	logger.Debugw("Downstream Multicast Traffic queue list ", log.Fields{"queuelist": mcastTrafficQueues})
 	return mcastTrafficQueues
 }
 
@@ -875,7 +875,7 @@
 			for ICount := 2; ICount < NumPbitMaps; ICount++ {
 				if p, err := strconv.Atoi(string(tp.UpstreamGemPortAttributeList[Count].PbitMap[ICount])); err == nil {
 					if uint32(ICount-2) == pbit && p == 1 { // Check this p-bit is set
-						log.Debugw("Found-US-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.UpstreamGemPortAttributeList[Count].GemportID})
+						logger.Debugw("Found-US-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.UpstreamGemPortAttributeList[Count].GemportID})
 						return tp.UpstreamGemPortAttributeList[Count].GemportID
 					}
 				}
@@ -889,14 +889,14 @@
 			for ICount := 2; ICount < NumPbitMaps; ICount++ {
 				if p, err := strconv.Atoi(string(tp.DownstreamGemPortAttributeList[Count].PbitMap[ICount])); err == nil {
 					if uint32(ICount-2) == pbit && p == 1 { // Check this p-bit is set
-						log.Debugw("Found-DS-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.DownstreamGemPortAttributeList[Count].GemportID})
+						logger.Debugw("Found-DS-GEMport-for-Pcp", log.Fields{"pbit": pbit, "GEMport": tp.DownstreamGemPortAttributeList[Count].GemportID})
 						return tp.DownstreamGemPortAttributeList[Count].GemportID
 					}
 				}
 			}
 		}
 	}
-	log.Errorw("No-GemportId-Found-For-Pcp", log.Fields{"pcpVlan": pbit})
+	logger.Errorw("No-GemportId-Found-For-Pcp", log.Fields{"pcpVlan": pbit})
 	return 0
 }
 
@@ -910,7 +910,7 @@
 		for kvPath, kvPair := range kvPairs {
 			if value, err := kvstore.ToByte(kvPair.Value); err == nil {
 				if err = json.Unmarshal(value, &tp); err != nil {
-					log.Errorw("error-unmarshal-kv-pair", log.Fields{"kvPath": kvPath, "value": value})
+					logger.Errorw("error-unmarshal-kv-pair", log.Fields{"kvPath": kvPath, "value": value})
 					continue
 				} else {
 					tpInstances = append(tpInstances, tp)
diff --git a/vendor/github.com/opencord/voltha-protos/v3/go/inter_container/inter_container.pb.go b/vendor/github.com/opencord/voltha-protos/v3/go/inter_container/inter_container.pb.go
index a5dea13..cfb521b 100644
--- a/vendor/github.com/opencord/voltha-protos/v3/go/inter_container/inter_container.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v3/go/inter_container/inter_container.pb.go
@@ -120,6 +120,12 @@
 // CoreInstances from public import voltha_protos/voltha.proto
 type CoreInstances = voltha.CoreInstances
 
+// OmciTestRequest from public import voltha_protos/voltha.proto
+type OmciTestRequest = voltha.OmciTestRequest
+
+// TestResponse from public import voltha_protos/voltha.proto
+type TestResponse = voltha.TestResponse
+
 // Voltha from public import voltha_protos/voltha.proto
 type Voltha = voltha.Voltha
 
@@ -148,6 +154,15 @@
 const EventFilterRuleKey_config_event_type = EventFilterRuleKey_EventFilterRuleType(voltha.EventFilterRuleKey_config_event_type)
 const EventFilterRuleKey_device_event_type = EventFilterRuleKey_EventFilterRuleType(voltha.EventFilterRuleKey_device_event_type)
 
+// TestResponse_TestResponseResult from public import voltha_protos/voltha.proto
+type TestResponse_TestResponseResult = voltha.TestResponse_TestResponseResult
+
+var TestResponse_TestResponseResult_name = voltha.TestResponse_TestResponseResult_name
+var TestResponse_TestResponseResult_value = voltha.TestResponse_TestResponseResult_value
+
+const TestResponse_SUCCESS = TestResponse_TestResponseResult(voltha.TestResponse_SUCCESS)
+const TestResponse_FAILURE = TestResponse_TestResponseResult(voltha.TestResponse_FAILURE)
+
 // SelfTestResponse_SelfTestResult from public import voltha_protos/voltha.proto
 type SelfTestResponse_SelfTestResult = voltha.SelfTestResponse_SelfTestResult
 
diff --git a/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go b/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go
index 7f6a921..fd6eba6 100644
--- a/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v3/go/voltha/events.pb.go
@@ -437,6 +437,7 @@
 	SerialNo             string            `protobuf:"bytes,4,opt,name=serial_no,json=serialNo,proto3" json:"serial_no,omitempty"`
 	DeviceId             string            `protobuf:"bytes,5,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"`
 	Context              map[string]string `protobuf:"bytes,6,rep,name=context,proto3" json:"context,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	Uuid                 string            `protobuf:"bytes,7,opt,name=uuid,proto3" json:"uuid,omitempty"`
 	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
 	XXX_unrecognized     []byte            `json:"-"`
 	XXX_sizecache        int32             `json:"-"`
@@ -509,6 +510,13 @@
 	return nil
 }
 
+func (m *MetricMetaData) GetUuid() string {
+	if m != nil {
+		return m.Uuid
+	}
+	return ""
+}
+
 //
 // Struct to convey a dictionary of metric->value pairs. Typically used in
 // pure shared-timestamp or shared-timestamp + shared object prefix situations.
@@ -1453,91 +1461,92 @@
 func init() { proto.RegisterFile("voltha_protos/events.proto", fileDescriptor_e63e6c07044fd2c4) }
 
 var fileDescriptor_e63e6c07044fd2c4 = []byte{
-	// 1374 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x5f, 0x73, 0xdb, 0x44,
-	0x10, 0xb7, 0xe4, 0x3f, 0xb1, 0x57, 0x4e, 0xa2, 0x5c, 0x19, 0x30, 0x6e, 0x69, 0x83, 0x18, 0x3a,
-	0x99, 0x76, 0xb0, 0xc1, 0x61, 0xa6, 0x69, 0x0a, 0x03, 0xae, 0x23, 0x1a, 0xb5, 0xb5, 0x1c, 0x64,
-	0x27, 0x1d, 0x78, 0xf1, 0x5c, 0xac, 0x8b, 0xad, 0x89, 0x6d, 0x79, 0xa4, 0xb3, 0x69, 0x3e, 0x00,
-	0xcf, 0x3c, 0xf2, 0xc0, 0x77, 0xe1, 0x8d, 0x8f, 0xc1, 0xf0, 0x25, 0xf8, 0x00, 0xcc, 0xfd, 0x91,
-	0x25, 0x39, 0x2e, 0x7d, 0xc8, 0x14, 0x9e, 0x7c, 0xda, 0xdb, 0xdf, 0xee, 0x6f, 0x77, 0x6f, 0xf7,
-	0xce, 0x50, 0x5d, 0xf8, 0x63, 0x3a, 0xc2, 0xfd, 0x59, 0xe0, 0x53, 0x3f, 0xac, 0x93, 0x05, 0x99,
-	0xd2, 0xb0, 0xc6, 0xbf, 0x50, 0x41, 0xec, 0x55, 0x2b, 0x69, 0x9d, 0x09, 0xa1, 0x58, 0x68, 0x54,
-	0xef, 0x0c, 0x7d, 0x7f, 0x38, 0x26, 0x75, 0x3c, 0xf3, 0xea, 0x78, 0x3a, 0xf5, 0x29, 0xa6, 0x9e,
-	0x3f, 0x95, 0xf8, 0xea, 0x3d, 0xb9, 0xcb, 0xbf, 0xce, 0xe7, 0x17, 0x75, 0xea, 0x4d, 0x48, 0x48,
-	0xf1, 0x64, 0x26, 0x14, 0x8c, 0x27, 0xb0, 0xdd, 0xf2, 0xa7, 0x17, 0xde, 0xd0, 0x64, 0x6e, 0x7b,
-	0x57, 0x33, 0x62, 0xec, 0x41, 0x9e, 0xfd, 0x86, 0x68, 0x03, 0xb2, 0xd8, 0x75, 0xf5, 0x0c, 0x02,
-	0x28, 0x04, 0x64, 0xe2, 0x2f, 0x88, 0xae, 0xb0, 0xf5, 0x7c, 0xe6, 0x62, 0x4a, 0x74, 0xd5, 0x18,
-	0x81, 0x96, 0x00, 0xa3, 0x2f, 0x20, 0x47, 0xaf, 0x66, 0xa4, 0xa2, 0xec, 0x2a, 0x7b, 0x5b, 0x8d,
-	0x8f, 0x6a, 0x82, 0x73, 0x6d, 0xc5, 0x7e, 0x8d, 0x1b, 0x77, 0xb8, 0x2a, 0x42, 0x90, 0x1b, 0xe1,
-	0x70, 0x54, 0x51, 0x77, 0x95, 0xbd, 0x92, 0xc3, 0xd7, 0x4c, 0xe6, 0x62, 0x8a, 0x2b, 0x59, 0x21,
-	0x63, 0x6b, 0xe3, 0x01, 0x94, 0x5f, 0xcc, 0xbc, 0x98, 0x63, 0x35, 0xe2, 0x58, 0x82, 0x7c, 0x38,
-	0xf6, 0x06, 0x44, 0xcf, 0xa0, 0x02, 0xa8, 0x34, 0xd4, 0x15, 0xe3, 0x57, 0x15, 0xb6, 0xda, 0x84,
-	0x06, 0xde, 0xa0, 0x4d, 0x28, 0x3e, 0xc2, 0x14, 0xa3, 0xf7, 0x20, 0x4f, 0x3d, 0x3a, 0x16, 0xd4,
-	0x4a, 0x8e, 0xf8, 0x40, 0x5b, 0x0c, 0xc0, 0x5d, 0x2b, 0x8e, 0x4a, 0x43, 0xf4, 0x00, 0x76, 0xc6,
-	0xfe, 0xd0, 0x1b, 0xe0, 0x71, 0xdf, 0x25, 0x0b, 0x6f, 0x40, 0xfa, 0x9e, 0x2b, 0x59, 0x6c, 0xcb,
-	0x8d, 0x23, 0x2e, 0xb7, 0x5c, 0x74, 0x1b, 0x4a, 0x21, 0x09, 0x3c, 0x3c, 0xee, 0x4f, 0xfd, 0x4a,
-	0x8e, 0xeb, 0x14, 0x85, 0xc0, 0xf6, 0xd9, 0x66, 0x6c, 0x20, 0x2f, 0x36, 0xdd, 0x08, 0xf9, 0x35,
-	0x6c, 0x0c, 0xfc, 0x29, 0x25, 0xaf, 0x69, 0xa5, 0xb0, 0x9b, 0xdd, 0xd3, 0x1a, 0x9f, 0x44, 0x89,
-	0x4a, 0x93, 0x66, 0x79, 0x63, 0x5a, 0xe6, 0x94, 0x06, 0x57, 0x4e, 0x84, 0xa9, 0x1e, 0x42, 0x39,
-	0xb9, 0x81, 0x74, 0xc8, 0x5e, 0x92, 0x2b, 0x19, 0x18, 0x5b, 0xb2, 0x60, 0x17, 0x78, 0x3c, 0x27,
-	0x32, 0xa9, 0xe2, 0xe3, 0x50, 0x3d, 0x50, 0x8c, 0x5f, 0x14, 0xd0, 0x85, 0x93, 0x33, 0x26, 0x3b,
-	0xc1, 0x5e, 0x10, 0xa2, 0x6f, 0x60, 0x63, 0xc2, 0x65, 0x61, 0x45, 0xe1, 0x7c, 0x3e, 0x4d, 0xf3,
-	0x89, 0x55, 0xa5, 0x20, 0x94, 0x8c, 0x24, 0x8a, 0x31, 0x4a, 0x6e, 0xbc, 0x8d, 0x91, 0x9a, 0x64,
-	0xf4, 0x87, 0x02, 0x3b, 0x02, 0x6c, 0x4d, 0x2f, 0xfc, 0x60, 0xc2, 0x0f, 0x2f, 0x6a, 0x40, 0x91,
-	0x9d, 0x70, 0x7e, 0x0a, 0x98, 0x19, 0xad, 0xf1, 0xfe, 0xfa, 0x1c, 0x39, 0x4b, 0x3d, 0xf4, 0x6d,
-	0x1c, 0x86, 0xca, 0xc3, 0xb8, 0x9f, 0x86, 0x24, 0xec, 0xbf, 0x83, 0x38, 0xfe, 0x54, 0xa0, 0x18,
-	0x1d, 0x50, 0x54, 0x4b, 0xf5, 0x41, 0x35, 0xe2, 0x91, 0x3c, 0xc0, 0xa9, 0x26, 0x88, 0xcf, 0xa1,
-	0xca, 0xcf, 0xe1, 0x21, 0x14, 0x67, 0x01, 0xb9, 0xf0, 0x5e, 0x93, 0xb0, 0x92, 0xe5, 0xb1, 0xdc,
-	0x5d, 0xb5, 0x51, 0x3b, 0x91, 0x0a, 0x22, 0x86, 0xa5, 0x7e, 0xf5, 0x14, 0x36, 0x53, 0x5b, 0x6b,
-	0xa2, 0xa8, 0x25, 0xa3, 0xd0, 0x1a, 0x95, 0x37, 0x95, 0x3b, 0x19, 0xdf, 0xcf, 0x0a, 0x94, 0x22,
-	0xdf, 0x8d, 0x1b, 0x04, 0x28, 0x1a, 0xed, 0x00, 0x80, 0x37, 0x6d, 0x5f, 0xf6, 0x39, 0x0b, 0xf1,
-	0xc3, 0x37, 0x96, 0xcb, 0x29, 0x71, 0x65, 0x56, 0x6f, 0xe3, 0x27, 0xd8, 0x6a, 0x8e, 0x71, 0x30,
-	0x89, 0x27, 0x01, 0x89, 0x26, 0xc1, 0x0e, 0x6c, 0xb6, 0x3a, 0xed, 0xf6, 0xa9, 0x6d, 0xb5, 0x9a,
-	0x3d, 0xab, 0x63, 0xeb, 0x19, 0xb4, 0x0d, 0x9a, 0x69, 0x9f, 0x59, 0x4e, 0xc7, 0x6e, 0x9b, 0x76,
-	0x4f, 0x57, 0xd0, 0x26, 0x94, 0xcc, 0xef, 0x4f, 0xad, 0x13, 0xfe, 0xa9, 0x22, 0x0d, 0x36, 0xba,
-	0xa6, 0x73, 0x66, 0xb5, 0x4c, 0x3d, 0x8b, 0xb6, 0x00, 0x4e, 0x9c, 0x4e, 0xcb, 0xec, 0x76, 0x2d,
-	0xfb, 0x99, 0x9e, 0x43, 0x65, 0x28, 0x76, 0xcd, 0xd6, 0xa9, 0x63, 0xf5, 0x7e, 0xd0, 0xf3, 0xc6,
-	0x73, 0x40, 0xb1, 0xe3, 0x16, 0xa6, 0x64, 0xe8, 0x07, 0x57, 0xc6, 0x97, 0x89, 0x51, 0x79, 0xc2,
-	0x5d, 0x6e, 0x40, 0xb6, 0xf3, 0x92, 0xb9, 0x62, 0x0b, 0xee, 0x84, 0x2f, 0x4e, 0xf5, 0x2c, 0x5b,
-	0xd8, 0xb6, 0xa5, 0xe7, 0x8c, 0x7d, 0xd8, 0x8e, 0x6d, 0x75, 0x29, 0xa6, 0xc4, 0xd8, 0x8d, 0x0c,
-	0x01, 0x14, 0x9c, 0xa6, 0xd5, 0x35, 0x8f, 0xf4, 0x0c, 0xa3, 0xd7, 0x7a, 0x69, 0x36, 0x1d, 0xf3,
-	0x48, 0x57, 0x0c, 0x9c, 0x24, 0xd0, 0x25, 0x0b, 0x12, 0x78, 0xf4, 0xca, 0x78, 0x91, 0x88, 0xde,
-	0xb2, 0x8f, 0xcc, 0x9e, 0xe9, 0xb4, 0x2d, 0xbb, 0xd9, 0x33, 0x05, 0xfc, 0x55, 0xd3, 0xb1, 0x59,
-	0x34, 0x0a, 0x9b, 0x93, 0x6d, 0xcb, 0xee, 0x38, 0xba, 0xca, 0x97, 0xcd, 0xe7, 0x1d, 0x47, 0xcf,
-	0xb2, 0x18, 0x5b, 0x8e, 0xd5, 0xb3, 0x5a, 0xcd, 0x97, 0x7a, 0xce, 0xf8, 0x3d, 0x0f, 0x10, 0xfb,
-	0x60, 0x55, 0xf3, 0x5c, 0x79, 0x70, 0x54, 0xcf, 0x45, 0x9f, 0xcb, 0xaa, 0xab, 0xbc, 0xea, 0x77,
-	0xa2, 0x7a, 0xa5, 0xeb, 0x91, 0xaa, 0xfb, 0x57, 0x50, 0x1c, 0xc8, 0x54, 0xf1, 0x39, 0xba, 0xd5,
-	0xd8, 0xbd, 0x8e, 0x8a, 0x92, 0x29, 0x91, 0x4b, 0x04, 0xda, 0x87, 0x7c, 0xc8, 0x92, 0xc3, 0xc7,
-	0x6b, 0xe2, 0x3e, 0x59, 0xc9, 0x9d, 0xc4, 0x09, 0x5d, 0xe6, 0x32, 0x94, 0xc9, 0xe1, 0x93, 0x77,
-	0xad, 0xcb, 0x28, 0x7d, 0x91, 0xcb, 0x08, 0x81, 0x1e, 0x41, 0x29, 0xc0, 0x5e, 0x48, 0xdc, 0x3e,
-	0x0d, 0x2b, 0x05, 0xde, 0x1e, 0xd5, 0x9a, 0xb8, 0x42, 0x6b, 0xd1, 0x15, 0x5a, 0xeb, 0x45, 0x57,
-	0xa8, 0x53, 0x14, 0xca, 0xbd, 0x10, 0x3d, 0x01, 0x2d, 0x20, 0x33, 0x3f, 0xa0, 0x02, 0xba, 0xf1,
-	0x56, 0x28, 0x44, 0xea, 0xbd, 0x10, 0x3d, 0x06, 0x18, 0x8c, 0xf0, 0x74, 0x28, 0xb0, 0xc5, 0xb7,
-	0x62, 0x4b, 0x52, 0xbb, 0x17, 0xa2, 0x7b, 0xcc, 0x6f, 0xe8, 0xcf, 0x03, 0x71, 0xd7, 0x94, 0x78,
-	0xb1, 0x20, 0x12, 0x59, 0x2e, 0xda, 0x05, 0xcd, 0x25, 0xe1, 0x20, 0xf0, 0x66, 0xac, 0x95, 0x2a,
-	0xc0, 0x15, 0x92, 0x22, 0xf4, 0x38, 0xbe, 0x8f, 0x34, 0xde, 0x89, 0xf7, 0xae, 0x27, 0x6c, 0xfd,
-	0x5d, 0xb4, 0xfe, 0xc2, 0x2c, 0xaf, 0xbf, 0x30, 0xef, 0xc3, 0x36, 0x66, 0xf6, 0xfa, 0xec, 0x64,
-	0xf4, 0xa7, 0x78, 0x42, 0x2a, 0x9b, 0x5c, 0x73, 0x93, 0x8b, 0x59, 0x25, 0x6c, 0x3c, 0x21, 0x37,
-	0xba, 0xdf, 0xfe, 0x56, 0x40, 0x13, 0x0e, 0xc5, 0x09, 0x5e, 0xc9, 0x8e, 0x72, 0x2d, 0x3b, 0x0f,
-	0x60, 0x47, 0x12, 0xe7, 0xaf, 0x2e, 0x41, 0x4b, 0x98, 0xdd, 0x76, 0x63, 0x43, 0x8c, 0xd8, 0x6a,
-	0x26, 0xb3, 0xd7, 0x33, 0x79, 0x18, 0x67, 0x32, 0xc7, 0x33, 0xb9, 0x3c, 0x7a, 0x09, 0x52, 0xef,
-	0xe0, 0x5a, 0x5f, 0xc0, 0x66, 0x7a, 0x2c, 0xfd, 0x47, 0x33, 0xf1, 0x18, 0x74, 0xd1, 0x4e, 0xf3,
-	0xf3, 0x1b, 0x4e, 0xc4, 0x57, 0x50, 0x8a, 0x27, 0xfa, 0xf3, 0xc8, 0x84, 0x0e, 0xe5, 0x56, 0xc7,
-	0xfe, 0xce, 0x7a, 0xd6, 0x37, 0xcf, 0x18, 0xb9, 0x0c, 0xe3, 0xfa, 0xe2, 0xc4, 0x92, 0x9f, 0x0a,
-	0xa3, 0xb7, 0xfc, 0x6c, 0xe8, 0x2a, 0x03, 0x1c, 0x99, 0x8c, 0xba, 0xd4, 0xc8, 0x1a, 0x7f, 0xa9,
-	0xa0, 0x71, 0xcb, 0xc7, 0x04, 0xbb, 0x24, 0xb8, 0x36, 0xd3, 0x1e, 0x25, 0x26, 0x94, 0x98, 0x6b,
-	0xb7, 0xa3, 0x9a, 0xfd, 0xfb, 0x70, 0x6a, 0x42, 0x39, 0x9c, 0x9f, 0xf7, 0x57, 0xc6, 0xdb, 0xdd,
-	0x14, 0x38, 0x91, 0x17, 0x89, 0xd7, 0xc2, 0x58, 0x84, 0x1e, 0xca, 0x79, 0x2a, 0xc6, 0xdb, 0x07,
-	0x29, 0xe8, 0xb5, 0x51, 0xfa, 0x31, 0x94, 0x79, 0xe3, 0x2c, 0x48, 0x10, 0xb2, 0xe3, 0x27, 0x5e,
-	0x95, 0x1a, 0x93, 0x9d, 0x09, 0xd1, 0xff, 0x33, 0xbc, 0x8c, 0xdf, 0x54, 0xc8, 0x8b, 0x6e, 0x7b,
-	0x08, 0x85, 0x11, 0xcf, 0xb2, 0x7c, 0xb3, 0xdd, 0x4a, 0x45, 0x24, 0x0a, 0xe0, 0x48, 0x15, 0x74,
-	0x00, 0xe5, 0x01, 0xff, 0x5f, 0x20, 0x3a, 0x4f, 0xbe, 0x45, 0x6e, 0xad, 0xf9, 0xcf, 0x70, 0x9c,
-	0x71, 0xb4, 0x41, 0xe2, 0x5f, 0x46, 0x1d, 0x4a, 0x97, 0x33, 0x4f, 0xc2, 0xb2, 0x1c, 0xa6, 0xaf,
-	0xbe, 0x40, 0x8e, 0x33, 0x4e, 0xf1, 0x32, 0x7a, 0x8e, 0x35, 0x00, 0x96, 0x80, 0x06, 0xcf, 0xb6,
-	0xd6, 0xd8, 0x59, 0x45, 0x34, 0x8e, 0x33, 0x4e, 0xe9, 0x72, 0xf9, 0xc2, 0x39, 0x80, 0x72, 0x72,
-	0x30, 0xf0, 0x74, 0x27, 0xe8, 0x25, 0xfa, 0x99, 0xd1, 0x4b, 0x8c, 0x8a, 0xa7, 0x65, 0x00, 0x31,
-	0x4b, 0x58, 0x69, 0x9e, 0x9a, 0x70, 0xcb, 0x0f, 0x86, 0x35, 0x7f, 0x46, 0xa6, 0x03, 0x3f, 0x70,
-	0x25, 0xfe, 0xc7, 0xda, 0xd0, 0xa3, 0xa3, 0xf9, 0x79, 0x6d, 0xe0, 0x4f, 0xea, 0xd1, 0x5e, 0x5d,
-	0xec, 0x7d, 0x26, 0xff, 0xe2, 0x2d, 0xf6, 0xeb, 0x43, 0x5f, 0xca, 0xce, 0x0b, 0x5c, 0xb8, 0xff,
-	0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x08, 0xad, 0xf2, 0x6f, 0x2b, 0x0e, 0x00, 0x00,
+	// 1388 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x57, 0x5d, 0x6e, 0xdb, 0xc6,
+	0x16, 0x16, 0xa9, 0xff, 0x43, 0xd9, 0xa6, 0x27, 0x17, 0xf7, 0xea, 0x2a, 0xb9, 0x89, 0x2f, 0x8b,
+	0x06, 0x46, 0x82, 0x4a, 0xad, 0x5c, 0x20, 0x8e, 0xd3, 0xa2, 0x55, 0x64, 0x36, 0x66, 0x12, 0x51,
+	0x2e, 0x25, 0x3b, 0x68, 0x5f, 0x84, 0xb1, 0x38, 0x96, 0x08, 0x4b, 0xa2, 0x40, 0x8e, 0xd4, 0x78,
+	0x01, 0x7d, 0xee, 0x02, 0xba, 0x84, 0xee, 0xa1, 0x6f, 0x5d, 0x46, 0xd1, 0x4d, 0x74, 0x01, 0xc5,
+	0xfc, 0x50, 0x24, 0x65, 0xa5, 0x79, 0x30, 0xda, 0x3e, 0x69, 0x78, 0xe6, 0x7c, 0xe7, 0xe7, 0x3b,
+	0x73, 0xce, 0x8c, 0xa0, 0xb6, 0xf4, 0x27, 0x74, 0x8c, 0x07, 0xf3, 0xc0, 0xa7, 0x7e, 0xd8, 0x20,
+	0x4b, 0x32, 0xa3, 0x61, 0x9d, 0x7f, 0xa1, 0x82, 0xd8, 0xab, 0x55, 0xd3, 0x3a, 0x53, 0x42, 0xb1,
+	0xd0, 0xa8, 0xdd, 0x1b, 0xf9, 0xfe, 0x68, 0x42, 0x1a, 0x78, 0xee, 0x35, 0xf0, 0x6c, 0xe6, 0x53,
+	0x4c, 0x3d, 0x7f, 0x26, 0xf1, 0xb5, 0x07, 0x72, 0x97, 0x7f, 0x5d, 0x2c, 0x2e, 0x1b, 0xd4, 0x9b,
+	0x92, 0x90, 0xe2, 0xe9, 0x5c, 0x28, 0x18, 0xcf, 0x60, 0xa7, 0xed, 0xcf, 0x2e, 0xbd, 0x91, 0xc9,
+	0xdc, 0xf6, 0xaf, 0xe7, 0xc4, 0xd8, 0x87, 0x3c, 0xfb, 0x0d, 0x51, 0x11, 0xb2, 0xd8, 0x75, 0xf5,
+	0x0c, 0x02, 0x28, 0x04, 0x64, 0xea, 0x2f, 0x89, 0xae, 0xb0, 0xf5, 0x62, 0xee, 0x62, 0x4a, 0x74,
+	0xd5, 0x18, 0x83, 0x96, 0x00, 0xa3, 0x4f, 0x20, 0x47, 0xaf, 0xe7, 0xa4, 0xaa, 0xec, 0x29, 0xfb,
+	0xdb, 0xcd, 0xff, 0xd5, 0x45, 0xcc, 0xf5, 0x35, 0xfb, 0x75, 0x6e, 0xdc, 0xe1, 0xaa, 0x08, 0x41,
+	0x6e, 0x8c, 0xc3, 0x71, 0x55, 0xdd, 0x53, 0xf6, 0xcb, 0x0e, 0x5f, 0x33, 0x99, 0x8b, 0x29, 0xae,
+	0x66, 0x85, 0x8c, 0xad, 0x8d, 0x47, 0x50, 0x79, 0x35, 0xf7, 0xe2, 0x18, 0x6b, 0x51, 0x8c, 0x65,
+	0xc8, 0x87, 0x13, 0x6f, 0x48, 0xf4, 0x0c, 0x2a, 0x80, 0x4a, 0x43, 0x5d, 0x31, 0x7e, 0x52, 0x61,
+	0xbb, 0x43, 0x68, 0xe0, 0x0d, 0x3b, 0x84, 0xe2, 0x63, 0x4c, 0x31, 0xfa, 0x17, 0xe4, 0xa9, 0x47,
+	0x27, 0x22, 0xb4, 0xb2, 0x23, 0x3e, 0xd0, 0x36, 0x03, 0x70, 0xd7, 0x8a, 0xa3, 0xd2, 0x10, 0x3d,
+	0x82, 0xdd, 0x89, 0x3f, 0xf2, 0x86, 0x78, 0x32, 0x70, 0xc9, 0xd2, 0x1b, 0x92, 0x81, 0xe7, 0xca,
+	0x28, 0x76, 0xe4, 0xc6, 0x31, 0x97, 0x5b, 0x2e, 0xba, 0x0b, 0xe5, 0x90, 0x04, 0x1e, 0x9e, 0x0c,
+	0x66, 0x7e, 0x35, 0xc7, 0x75, 0x4a, 0x42, 0x60, 0xfb, 0x6c, 0x33, 0x36, 0x90, 0x17, 0x9b, 0x6e,
+	0x84, 0xfc, 0x1c, 0x8a, 0x43, 0x7f, 0x46, 0xc9, 0x5b, 0x5a, 0x2d, 0xec, 0x65, 0xf7, 0xb5, 0xe6,
+	0x07, 0x11, 0x51, 0xe9, 0xa0, 0x19, 0x6f, 0x4c, 0xcb, 0x9c, 0xd1, 0xe0, 0xda, 0x89, 0x30, 0x8c,
+	0x9d, 0xc5, 0xc2, 0x73, 0xab, 0x45, 0xc1, 0x0e, 0x5b, 0xd7, 0x8e, 0xa0, 0x92, 0x54, 0x46, 0x3a,
+	0x64, 0xaf, 0xc8, 0xb5, 0x4c, 0x96, 0x2d, 0x19, 0x01, 0x4b, 0x3c, 0x59, 0x10, 0x49, 0xb4, 0xf8,
+	0x38, 0x52, 0x0f, 0x15, 0xe3, 0x07, 0x05, 0x74, 0xe1, 0xf8, 0x9c, 0xc9, 0x4e, 0xb1, 0x17, 0x84,
+	0xe8, 0x0b, 0x28, 0x4e, 0xb9, 0x2c, 0xac, 0x2a, 0x3c, 0xc6, 0x0f, 0xd3, 0x31, 0xc6, 0xaa, 0x52,
+	0x10, 0xca, 0x28, 0x25, 0x8a, 0x45, 0x94, 0xdc, 0x78, 0x5f, 0x44, 0x6a, 0x32, 0xa2, 0x5f, 0x14,
+	0xd8, 0x15, 0x60, 0x6b, 0x76, 0xe9, 0x07, 0x53, 0x7e, 0xa0, 0x51, 0x13, 0x4a, 0xec, 0xd4, 0xf3,
+	0x93, 0xc1, 0xcc, 0x68, 0xcd, 0x7f, 0x6f, 0xe6, 0xcd, 0x59, 0xe9, 0xa1, 0x2f, 0xe3, 0x34, 0x54,
+	0x9e, 0xc6, 0xc3, 0x34, 0x24, 0x61, 0xff, 0x2f, 0xc8, 0xe3, 0x57, 0x05, 0x4a, 0xd1, 0xa1, 0x45,
+	0xf5, 0x54, 0x6f, 0xd4, 0xa2, 0x38, 0x92, 0x87, 0x3a, 0xd5, 0x18, 0xf1, 0xd9, 0x54, 0xf9, 0xd9,
+	0x3c, 0x82, 0xd2, 0x3c, 0x20, 0x97, 0xde, 0x5b, 0x12, 0x56, 0xb3, 0x3c, 0x97, 0xfb, 0xeb, 0x36,
+	0xea, 0xa7, 0x52, 0x41, 0xe4, 0xb0, 0xd2, 0xaf, 0x9d, 0xc1, 0x56, 0x6a, 0x6b, 0x43, 0x16, 0xf5,
+	0x64, 0x16, 0x5a, 0xb3, 0xfa, 0xae, 0x72, 0x27, 0xf3, 0xfb, 0x5e, 0x81, 0x72, 0xe4, 0xbb, 0x79,
+	0x8b, 0x04, 0x45, 0xf3, 0x1d, 0x02, 0xf0, 0x46, 0x1e, 0xc8, 0xde, 0x67, 0x29, 0xfe, 0xf7, 0x9d,
+	0xe5, 0x72, 0xca, 0x5c, 0x99, 0xd5, 0xdb, 0xf8, 0x0e, 0xb6, 0x5b, 0x13, 0x1c, 0x4c, 0xe3, 0xe9,
+	0x40, 0xa2, 0xe9, 0xb0, 0x0b, 0x5b, 0xed, 0x6e, 0xa7, 0x73, 0x66, 0x5b, 0xed, 0x56, 0xdf, 0xea,
+	0xda, 0x7a, 0x06, 0xed, 0x80, 0x66, 0xda, 0xe7, 0x96, 0xd3, 0xb5, 0x3b, 0xa6, 0xdd, 0xd7, 0x15,
+	0xb4, 0x05, 0x65, 0xf3, 0xeb, 0x33, 0xeb, 0x94, 0x7f, 0xaa, 0x48, 0x83, 0x62, 0xcf, 0x74, 0xce,
+	0xad, 0xb6, 0xa9, 0x67, 0xd1, 0x36, 0xc0, 0xa9, 0xd3, 0x6d, 0x9b, 0xbd, 0x9e, 0x65, 0xbf, 0xd0,
+	0x73, 0xa8, 0x02, 0xa5, 0x9e, 0xd9, 0x3e, 0x73, 0xac, 0xfe, 0x37, 0x7a, 0xde, 0x78, 0x09, 0x28,
+	0x76, 0xdc, 0xc6, 0x94, 0x8c, 0xfc, 0xe0, 0xda, 0xf8, 0x34, 0x31, 0x3e, 0x4f, 0xb9, 0xcb, 0x22,
+	0x64, 0xbb, 0xaf, 0x99, 0x2b, 0xb6, 0xe0, 0x4e, 0xf8, 0xe2, 0x4c, 0xcf, 0xb2, 0x85, 0x6d, 0x5b,
+	0x7a, 0xce, 0x38, 0x80, 0x9d, 0xd8, 0x56, 0x8f, 0x62, 0x4a, 0x8c, 0xbd, 0xc8, 0x10, 0x40, 0xc1,
+	0x69, 0x59, 0x3d, 0xf3, 0x58, 0xcf, 0xb0, 0xf0, 0xda, 0xaf, 0xcd, 0x96, 0x63, 0x1e, 0xeb, 0x8a,
+	0x81, 0x93, 0x01, 0xf4, 0xc8, 0x92, 0x04, 0x1e, 0xbd, 0x36, 0x5e, 0x25, 0xb2, 0xb7, 0xec, 0x63,
+	0xb3, 0x6f, 0x3a, 0x1d, 0xcb, 0x6e, 0xf5, 0x4d, 0x01, 0x7f, 0xd3, 0x72, 0x6c, 0x96, 0x8d, 0xc2,
+	0x66, 0x67, 0xc7, 0xb2, 0xbb, 0x8e, 0xae, 0xf2, 0x65, 0xeb, 0x65, 0xd7, 0xd1, 0xb3, 0x2c, 0xc7,
+	0xb6, 0x63, 0xf5, 0xad, 0x76, 0xeb, 0xb5, 0x9e, 0x33, 0x7e, 0xce, 0x03, 0xc4, 0x3e, 0x58, 0xd5,
+	0x3c, 0x57, 0x1e, 0x1c, 0xd5, 0x73, 0xd1, 0xc7, 0xb2, 0xea, 0x2a, 0xaf, 0xfa, 0xbd, 0xa8, 0x5e,
+	0xe9, 0x7a, 0xa4, 0xea, 0xfe, 0x19, 0x94, 0x86, 0x92, 0x2a, 0x3e, 0x5b, 0xb7, 0x9b, 0x7b, 0x37,
+	0x51, 0x11, 0x99, 0x12, 0xb9, 0x42, 0xa0, 0x03, 0xc8, 0x87, 0x8c, 0x1c, 0x3e, 0x72, 0x13, 0x77,
+	0xcc, 0x1a, 0x77, 0x12, 0x27, 0x74, 0x99, 0xcb, 0x50, 0x92, 0xc3, 0xa7, 0xf1, 0x46, 0x97, 0x11,
+	0x7d, 0x91, 0xcb, 0x08, 0x81, 0x9e, 0x40, 0x39, 0xc0, 0x5e, 0x48, 0xdc, 0x01, 0x0d, 0xab, 0x05,
+	0xde, 0x1e, 0xb5, 0xba, 0xb8, 0x56, 0xeb, 0xd1, 0xb5, 0x5a, 0xef, 0x47, 0xd7, 0xaa, 0x53, 0x12,
+	0xca, 0xfd, 0x10, 0x3d, 0x03, 0x2d, 0x20, 0x73, 0x3f, 0xa0, 0x02, 0x5a, 0x7c, 0x2f, 0x14, 0x22,
+	0xf5, 0x7e, 0x88, 0x9e, 0x02, 0x0c, 0xc7, 0x78, 0x36, 0x12, 0xd8, 0xd2, 0x7b, 0xb1, 0x65, 0xa9,
+	0xdd, 0x0f, 0xd1, 0x03, 0xe6, 0x37, 0xf4, 0x17, 0x81, 0xb8, 0x7f, 0xca, 0xbc, 0x58, 0x10, 0x89,
+	0x2c, 0x17, 0xed, 0x81, 0xe6, 0x92, 0x70, 0x18, 0x78, 0x73, 0xd6, 0x4a, 0x55, 0xe0, 0x0a, 0x49,
+	0x11, 0x7a, 0x1a, 0xdf, 0x51, 0x1a, 0xef, 0xc4, 0x07, 0x37, 0x09, 0x7b, 0xc7, 0xfd, 0xb4, 0xf1,
+	0x12, 0xad, 0x6c, 0xbe, 0x44, 0x1f, 0xc2, 0x0e, 0x66, 0xf6, 0x06, 0xec, 0x64, 0x0c, 0x66, 0x78,
+	0x4a, 0xaa, 0x5b, 0x5c, 0x73, 0x8b, 0x8b, 0x59, 0x25, 0x6c, 0x3c, 0x25, 0xb7, 0xba, 0xdf, 0x7e,
+	0x57, 0x40, 0x13, 0x0e, 0xc5, 0x09, 0x5e, 0x63, 0x47, 0xb9, 0xc1, 0xce, 0x23, 0xd8, 0x95, 0x81,
+	0xf3, 0x97, 0x98, 0x08, 0x4b, 0x98, 0xdd, 0x71, 0x63, 0x43, 0x2c, 0xb0, 0x75, 0x26, 0xb3, 0x37,
+	0x99, 0x3c, 0x8a, 0x99, 0xcc, 0x71, 0x26, 0x57, 0x47, 0x2f, 0x11, 0xd4, 0x66, 0x2a, 0x6f, 0x95,
+	0xf6, 0x12, 0xb6, 0xd2, 0x63, 0xe9, 0x6f, 0x9a, 0x89, 0x27, 0xa0, 0x8b, 0x76, 0x5a, 0x5c, 0xdc,
+	0x72, 0x22, 0xbe, 0x81, 0x72, 0x3c, 0xd1, 0x5f, 0x46, 0x26, 0x74, 0xa8, 0xb4, 0xbb, 0xf6, 0x57,
+	0xd6, 0x8b, 0x81, 0x79, 0xce, 0x82, 0xcb, 0xb0, 0x58, 0x5f, 0x9d, 0x5a, 0xf2, 0x53, 0x61, 0xe1,
+	0xad, 0x3e, 0x9b, 0xba, 0xca, 0x00, 0xc7, 0x26, 0x0b, 0x5d, 0x6a, 0x64, 0x8d, 0xdf, 0x54, 0xd0,
+	0xb8, 0xe5, 0x13, 0x82, 0x5d, 0x12, 0xdc, 0x98, 0x69, 0x4f, 0x12, 0x13, 0x4a, 0xcc, 0xb5, 0xbb,
+	0x51, 0xcd, 0xfe, 0x7c, 0x38, 0xb5, 0xa0, 0x12, 0x2e, 0x2e, 0x06, 0x6b, 0xe3, 0xed, 0x7e, 0x0a,
+	0x9c, 0xe0, 0x45, 0xe2, 0xb5, 0x30, 0x16, 0xa1, 0xc7, 0x72, 0x9e, 0x8a, 0xf1, 0xf6, 0x9f, 0x14,
+	0xf4, 0xc6, 0x28, 0xfd, 0x3f, 0x54, 0x78, 0xe3, 0x2c, 0x49, 0x10, 0xb2, 0xe3, 0x27, 0x5e, 0x9a,
+	0x1a, 0x93, 0x9d, 0x0b, 0xd1, 0x3f, 0x33, 0xbc, 0x8c, 0x1f, 0x55, 0xc8, 0x8b, 0x6e, 0x7b, 0x0c,
+	0x85, 0x31, 0x67, 0x59, 0xbe, 0xd9, 0xee, 0xa4, 0x32, 0x12, 0x05, 0x70, 0xa4, 0x0a, 0x3a, 0x84,
+	0xca, 0x90, 0xff, 0x57, 0x10, 0x9d, 0x27, 0xdf, 0x22, 0x77, 0x36, 0xfc, 0x8f, 0x38, 0xc9, 0x38,
+	0xda, 0x30, 0xf1, 0xcf, 0xa3, 0x01, 0xe5, 0xab, 0xb9, 0x27, 0x61, 0x59, 0x0e, 0xd3, 0xd7, 0x5f,
+	0x20, 0x27, 0x19, 0xa7, 0x74, 0x15, 0x3d, 0xc7, 0x9a, 0x00, 0x2b, 0x40, 0x93, 0xb3, 0xad, 0x35,
+	0x77, 0xd7, 0x11, 0xcd, 0x93, 0x8c, 0x53, 0xbe, 0x5a, 0xbd, 0x70, 0x0e, 0xa1, 0x92, 0x1c, 0x0c,
+	0x9c, 0xee, 0x44, 0x78, 0x89, 0x7e, 0x66, 0xe1, 0x25, 0x46, 0xc5, 0xf3, 0x0a, 0x80, 0x98, 0x25,
+	0xac, 0x34, 0xcf, 0x4d, 0xb8, 0xe3, 0x07, 0xa3, 0xba, 0x3f, 0x27, 0xb3, 0xa1, 0x1f, 0xb8, 0x12,
+	0xff, 0x6d, 0x7d, 0xe4, 0xd1, 0xf1, 0xe2, 0xa2, 0x3e, 0xf4, 0xa7, 0x8d, 0x68, 0xaf, 0x21, 0xf6,
+	0x3e, 0x92, 0x7f, 0xfb, 0x96, 0x07, 0x8d, 0x91, 0x2f, 0x65, 0x17, 0x05, 0x2e, 0x3c, 0xf8, 0x23,
+	0x00, 0x00, 0xff, 0xff, 0xe5, 0xa6, 0xf9, 0x0e, 0x3f, 0x0e, 0x00, 0x00,
 }
diff --git a/vendor/github.com/opencord/voltha-protos/v3/go/voltha/voltha.pb.go b/vendor/github.com/opencord/voltha-protos/v3/go/voltha/voltha.pb.go
index 172221f..83fb298 100644
--- a/vendor/github.com/opencord/voltha-protos/v3/go/voltha/voltha.pb.go
+++ b/vendor/github.com/opencord/voltha-protos/v3/go/voltha/voltha.pb.go
@@ -1282,6 +1282,31 @@
 	return fileDescriptor_e084f1a60ce7016c, []int{2, 0}
 }
 
+type TestResponse_TestResponseResult int32
+
+const (
+	TestResponse_SUCCESS TestResponse_TestResponseResult = 0
+	TestResponse_FAILURE TestResponse_TestResponseResult = 1
+)
+
+var TestResponse_TestResponseResult_name = map[int32]string{
+	0: "SUCCESS",
+	1: "FAILURE",
+}
+
+var TestResponse_TestResponseResult_value = map[string]int32{
+	"SUCCESS": 0,
+	"FAILURE": 1,
+}
+
+func (x TestResponse_TestResponseResult) String() string {
+	return proto.EnumName(TestResponse_TestResponseResult_name, int32(x))
+}
+
+func (TestResponse_TestResponseResult) EnumDescriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{9, 0}
+}
+
 type SelfTestResponse_SelfTestResult int32
 
 const (
@@ -1310,7 +1335,7 @@
 }
 
 func (SelfTestResponse_SelfTestResult) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{9, 0}
+	return fileDescriptor_e084f1a60ce7016c, []int{11, 0}
 }
 
 type DeviceGroup struct {
@@ -1683,6 +1708,92 @@
 	return nil
 }
 
+type OmciTestRequest struct {
+	Id                   string   `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
+	Uuid                 string   `protobuf:"bytes,2,opt,name=uuid,proto3" json:"uuid,omitempty"`
+	XXX_NoUnkeyedLiteral struct{} `json:"-"`
+	XXX_unrecognized     []byte   `json:"-"`
+	XXX_sizecache        int32    `json:"-"`
+}
+
+func (m *OmciTestRequest) Reset()         { *m = OmciTestRequest{} }
+func (m *OmciTestRequest) String() string { return proto.CompactTextString(m) }
+func (*OmciTestRequest) ProtoMessage()    {}
+func (*OmciTestRequest) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{8}
+}
+
+func (m *OmciTestRequest) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_OmciTestRequest.Unmarshal(m, b)
+}
+func (m *OmciTestRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_OmciTestRequest.Marshal(b, m, deterministic)
+}
+func (m *OmciTestRequest) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_OmciTestRequest.Merge(m, src)
+}
+func (m *OmciTestRequest) XXX_Size() int {
+	return xxx_messageInfo_OmciTestRequest.Size(m)
+}
+func (m *OmciTestRequest) XXX_DiscardUnknown() {
+	xxx_messageInfo_OmciTestRequest.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_OmciTestRequest proto.InternalMessageInfo
+
+func (m *OmciTestRequest) GetId() string {
+	if m != nil {
+		return m.Id
+	}
+	return ""
+}
+
+func (m *OmciTestRequest) GetUuid() string {
+	if m != nil {
+		return m.Uuid
+	}
+	return ""
+}
+
+type TestResponse struct {
+	Result               TestResponse_TestResponseResult `protobuf:"varint,1,opt,name=result,proto3,enum=voltha.TestResponse_TestResponseResult" json:"result,omitempty"`
+	XXX_NoUnkeyedLiteral struct{}                        `json:"-"`
+	XXX_unrecognized     []byte                          `json:"-"`
+	XXX_sizecache        int32                           `json:"-"`
+}
+
+func (m *TestResponse) Reset()         { *m = TestResponse{} }
+func (m *TestResponse) String() string { return proto.CompactTextString(m) }
+func (*TestResponse) ProtoMessage()    {}
+func (*TestResponse) Descriptor() ([]byte, []int) {
+	return fileDescriptor_e084f1a60ce7016c, []int{9}
+}
+
+func (m *TestResponse) XXX_Unmarshal(b []byte) error {
+	return xxx_messageInfo_TestResponse.Unmarshal(m, b)
+}
+func (m *TestResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
+	return xxx_messageInfo_TestResponse.Marshal(b, m, deterministic)
+}
+func (m *TestResponse) XXX_Merge(src proto.Message) {
+	xxx_messageInfo_TestResponse.Merge(m, src)
+}
+func (m *TestResponse) XXX_Size() int {
+	return xxx_messageInfo_TestResponse.Size(m)
+}
+func (m *TestResponse) XXX_DiscardUnknown() {
+	xxx_messageInfo_TestResponse.DiscardUnknown(m)
+}
+
+var xxx_messageInfo_TestResponse proto.InternalMessageInfo
+
+func (m *TestResponse) GetResult() TestResponse_TestResponseResult {
+	if m != nil {
+		return m.Result
+	}
+	return TestResponse_SUCCESS
+}
+
 // Voltha represents the Voltha cluster data.  Each Core instance will hold a subset of
 // the entire cluster. However, some items (e.g. adapters) will be held by all cores
 // for better performance
@@ -1705,7 +1816,7 @@
 func (m *Voltha) String() string { return proto.CompactTextString(m) }
 func (*Voltha) ProtoMessage()    {}
 func (*Voltha) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{8}
+	return fileDescriptor_e084f1a60ce7016c, []int{10}
 }
 
 func (m *Voltha) XXX_Unmarshal(b []byte) error {
@@ -1801,7 +1912,7 @@
 func (m *SelfTestResponse) String() string { return proto.CompactTextString(m) }
 func (*SelfTestResponse) ProtoMessage()    {}
 func (*SelfTestResponse) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{9}
+	return fileDescriptor_e084f1a60ce7016c, []int{11}
 }
 
 func (m *SelfTestResponse) XXX_Unmarshal(b []byte) error {
@@ -1843,7 +1954,7 @@
 func (m *OfAgentSubscriber) String() string { return proto.CompactTextString(m) }
 func (*OfAgentSubscriber) ProtoMessage()    {}
 func (*OfAgentSubscriber) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{10}
+	return fileDescriptor_e084f1a60ce7016c, []int{12}
 }
 
 func (m *OfAgentSubscriber) XXX_Unmarshal(b []byte) error {
@@ -1893,7 +2004,7 @@
 func (m *Membership) String() string { return proto.CompactTextString(m) }
 func (*Membership) ProtoMessage()    {}
 func (*Membership) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{11}
+	return fileDescriptor_e084f1a60ce7016c, []int{13}
 }
 
 func (m *Membership) XXX_Unmarshal(b []byte) error {
@@ -1941,7 +2052,7 @@
 func (m *FlowMetadata) String() string { return proto.CompactTextString(m) }
 func (*FlowMetadata) ProtoMessage()    {}
 func (*FlowMetadata) Descriptor() ([]byte, []int) {
-	return fileDescriptor_e084f1a60ce7016c, []int{12}
+	return fileDescriptor_e084f1a60ce7016c, []int{14}
 }
 
 func (m *FlowMetadata) XXX_Unmarshal(b []byte) error {
@@ -1971,6 +2082,7 @@
 
 func init() {
 	proto.RegisterEnum("voltha.EventFilterRuleKey_EventFilterRuleType", EventFilterRuleKey_EventFilterRuleType_name, EventFilterRuleKey_EventFilterRuleType_value)
+	proto.RegisterEnum("voltha.TestResponse_TestResponseResult", TestResponse_TestResponseResult_name, TestResponse_TestResponseResult_value)
 	proto.RegisterEnum("voltha.SelfTestResponse_SelfTestResult", SelfTestResponse_SelfTestResult_name, SelfTestResponse_SelfTestResult_value)
 	proto.RegisterType((*DeviceGroup)(nil), "voltha.DeviceGroup")
 	proto.RegisterType((*DeviceGroups)(nil), "voltha.DeviceGroups")
@@ -1980,6 +2092,8 @@
 	proto.RegisterType((*EventFilters)(nil), "voltha.EventFilters")
 	proto.RegisterType((*CoreInstance)(nil), "voltha.CoreInstance")
 	proto.RegisterType((*CoreInstances)(nil), "voltha.CoreInstances")
+	proto.RegisterType((*OmciTestRequest)(nil), "voltha.OmciTestRequest")
+	proto.RegisterType((*TestResponse)(nil), "voltha.TestResponse")
 	proto.RegisterType((*Voltha)(nil), "voltha.Voltha")
 	proto.RegisterType((*SelfTestResponse)(nil), "voltha.SelfTestResponse")
 	proto.RegisterType((*OfAgentSubscriber)(nil), "voltha.OfAgentSubscriber")
@@ -1990,157 +2104,163 @@
 func init() { proto.RegisterFile("voltha_protos/voltha.proto", fileDescriptor_e084f1a60ce7016c) }
 
 var fileDescriptor_e084f1a60ce7016c = []byte{
-	// 2400 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x4b, 0x73, 0x1b, 0xc7,
-	0x11, 0xe6, 0xf2, 0xcd, 0x26, 0x48, 0x02, 0x03, 0x3e, 0x20, 0x90, 0xb4, 0xa4, 0xb1, 0x2c, 0x31,
-	0xb4, 0x09, 0x48, 0xa2, 0xac, 0x4a, 0xa4, 0xb8, 0x62, 0xbe, 0xc4, 0x20, 0x12, 0x05, 0x64, 0x29,
-	0x4a, 0x79, 0x58, 0x85, 0x5a, 0x60, 0x07, 0xe0, 0x96, 0x16, 0x58, 0x64, 0x77, 0x40, 0x99, 0xa5,
-	0xf2, 0xc5, 0x79, 0x38, 0x77, 0xdf, 0x73, 0x4a, 0x2a, 0x55, 0xf9, 0x2f, 0x3e, 0xf9, 0x94, 0x6b,
-	0x2a, 0x87, 0xfc, 0x02, 0x9f, 0x53, 0xd3, 0x33, 0x0b, 0xec, 0x62, 0x77, 0x49, 0xc2, 0x71, 0x55,
-	0x4e, 0xe4, 0x4e, 0xf7, 0x7c, 0xfd, 0x75, 0xcf, 0x4c, 0x4f, 0x4f, 0x03, 0xf2, 0x67, 0x8e, 0xcd,
-	0x4f, 0x8d, 0x6a, 0xc7, 0x75, 0xb8, 0xe3, 0x15, 0xe5, 0x57, 0x01, 0xbf, 0xc8, 0xa4, 0xfc, 0xca,
-	0xaf, 0x35, 0x1d, 0xa7, 0x69, 0xb3, 0xa2, 0xd1, 0xb1, 0x8a, 0x46, 0xbb, 0xed, 0x70, 0x83, 0x5b,
-	0x4e, 0xdb, 0x93, 0x5a, 0xf9, 0x55, 0x25, 0xc5, 0xaf, 0x5a, 0xb7, 0x51, 0x64, 0xad, 0x0e, 0x3f,
-	0x57, 0xc2, 0x5c, 0x18, 0xbe, 0xc5, 0xb8, 0x02, 0xcf, 0x0f, 0x18, 0xae, 0x3b, 0xad, 0x96, 0xd3,
-	0x8e, 0x97, 0x9d, 0x32, 0xc3, 0xe6, 0xa7, 0x4a, 0x46, 0xc3, 0x32, 0xdb, 0x69, 0x5a, 0x75, 0xc3,
-	0xae, 0x9a, 0xec, 0xcc, 0xaa, 0xb3, 0xf8, 0xf9, 0x21, 0xd9, 0x6a, 0x58, 0x66, 0x98, 0x46, 0x87,
-	0x33, 0x57, 0x09, 0xaf, 0x87, 0x85, 0x4e, 0x87, 0xb5, 0x1b, 0xb6, 0xf3, 0xb6, 0x7a, 0x6f, 0x3b,
-	0x41, 0xa1, 0x55, 0xb7, 0xaa, 0x2d, 0xab, 0x56, 0x35, 0x6b, 0x4a, 0xe1, 0x66, 0x8c, 0x82, 0x61,
-	0x1b, 0x6e, 0xab, 0xa7, 0x42, 0xff, 0xaa, 0xc1, 0xec, 0x3e, 0x52, 0x3a, 0x74, 0x9d, 0x6e, 0x87,
-	0x2c, 0xc1, 0xa8, 0x65, 0xe6, 0xb4, 0x1b, 0xda, 0xc6, 0xcc, 0xee, 0xc4, 0x7f, 0xbe, 0xfb, 0x66,
-	0x5d, 0xd3, 0x47, 0x2d, 0x93, 0x94, 0x60, 0x21, 0xec, 0x9c, 0x97, 0x1b, 0xbd, 0x31, 0xb6, 0x31,
-	0x7b, 0x7f, 0xa9, 0xa0, 0x56, 0xe9, 0x99, 0x14, 0x4b, 0xac, 0xdd, 0x99, 0x7f, 0x7d, 0xf7, 0xcd,
-	0xfa, 0xb8, 0xc0, 0xd2, 0xe7, 0xed, 0xa0, 0xc4, 0x23, 0xdb, 0x30, 0xe5, 0x43, 0x8c, 0x21, 0xc4,
-	0xbc, 0x0f, 0x11, 0x9d, 0xeb, 0x6b, 0xd2, 0x9f, 0x40, 0x2a, 0xc0, 0xd2, 0x23, 0x3f, 0x82, 0x09,
-	0x8b, 0xb3, 0x96, 0x97, 0xd3, 0x10, 0x22, 0x1b, 0x86, 0x40, 0x25, 0x5d, 0x6a, 0xd0, 0xbf, 0x68,
-	0x40, 0x0e, 0xce, 0x58, 0x9b, 0x3f, 0xb1, 0x6c, 0xce, 0x5c, 0xbd, 0x6b, 0xb3, 0xa7, 0xec, 0x9c,
-	0x7e, 0xa5, 0x41, 0x76, 0x60, 0xf8, 0xc5, 0x79, 0x87, 0x91, 0x79, 0x80, 0x06, 0x8e, 0x54, 0x0d,
-	0xdb, 0x4e, 0x8f, 0x90, 0x14, 0x4c, 0xd7, 0x0d, 0xce, 0x9a, 0x8e, 0x7b, 0x9e, 0xd6, 0x48, 0x1a,
-	0x52, 0x5e, 0xb7, 0x56, 0xed, 0x8d, 0x8c, 0x12, 0x02, 0xf3, 0x6f, 0x3a, 0x56, 0x95, 0x09, 0xa8,
-	0x2a, 0x3f, 0xef, 0xb0, 0xf4, 0x18, 0x59, 0x82, 0x4c, 0xdd, 0x69, 0x37, 0xac, 0x66, 0x70, 0x78,
-	0x5c, 0x0c, 0x4b, 0x7f, 0x82, 0xc3, 0x13, 0xd4, 0x82, 0x85, 0x01, 0x22, 0xe4, 0x53, 0x18, 0x7b,
-	0xc3, 0xce, 0x71, 0x19, 0xe6, 0xef, 0x17, 0x7c, 0xe7, 0xa2, 0x5e, 0x14, 0x62, 0x3c, 0xd0, 0xc5,
-	0x54, 0xb2, 0x08, 0x13, 0x67, 0x86, 0xdd, 0x65, 0xb9, 0x51, 0xb1, 0x94, 0xba, 0xfc, 0xa0, 0x7f,
-	0xd7, 0x60, 0x36, 0x30, 0x25, 0x69, 0xb5, 0x97, 0x61, 0x92, 0xb5, 0x8d, 0x9a, 0x2d, 0x67, 0x4f,
-	0xeb, 0xea, 0x8b, 0xac, 0xc2, 0x8c, 0x72, 0xc0, 0x32, 0x73, 0x63, 0x08, 0x3c, 0x2d, 0x07, 0x4a,
-	0x26, 0x59, 0x07, 0xe8, 0xbb, 0x95, 0x1b, 0x47, 0xe9, 0x0c, 0x8e, 0x60, 0x5c, 0xb7, 0x60, 0xc2,
-	0xed, 0xda, 0xcc, 0xcb, 0x4d, 0xe0, 0x8a, 0xad, 0x24, 0x38, 0xa5, 0x4b, 0x2d, 0xfa, 0x09, 0xa4,
-	0x02, 0x12, 0x8f, 0x6c, 0xc1, 0x94, 0x5c, 0x96, 0xc8, 0x92, 0x07, 0x01, 0x7c, 0x1d, 0xfa, 0x06,
-	0x52, 0x7b, 0x8e, 0xcb, 0x4a, 0x6d, 0x8f, 0x1b, 0xed, 0x3a, 0x23, 0xb7, 0x61, 0xd6, 0x52, 0xff,
-	0x57, 0x07, 0x3d, 0x06, 0x5f, 0x52, 0x32, 0xc9, 0x36, 0x4c, 0xca, 0x03, 0x8e, 0x9e, 0xcf, 0xde,
-	0x5f, 0xf4, 0xad, 0xfc, 0x1c, 0x47, 0x8f, 0xb9, 0xc1, 0xbb, 0xde, 0xee, 0x84, 0xd8, 0xa1, 0x23,
-	0xba, 0x52, 0xa5, 0x8f, 0x61, 0x2e, 0x68, 0xcc, 0x23, 0x9b, 0xe1, 0xdd, 0xd9, 0x03, 0x09, 0x6a,
-	0xf9, 0xdb, 0xf3, 0x9f, 0xe3, 0x30, 0xf9, 0x12, 0xc5, 0xe4, 0x3a, 0x4c, 0x9d, 0x31, 0xd7, 0xb3,
-	0x9c, 0x76, 0x98, 0xa0, 0x3f, 0x4a, 0x1e, 0xc2, 0xb4, 0x4a, 0x11, 0xfe, 0xf1, 0x5b, 0xf0, 0xa1,
-	0x77, 0xe4, 0x78, 0xf0, 0xf0, 0xf4, 0x74, 0xe3, 0x4e, 0xef, 0xd8, 0xff, 0x7e, 0x7a, 0xc7, 0xaf,
-	0x7a, 0x7a, 0xc9, 0xa7, 0x90, 0x52, 0xfb, 0x46, 0xec, 0x0d, 0x7f, 0x0b, 0x90, 0xf0, 0x4c, 0xb1,
-	0x4b, 0x82, 0xb3, 0x67, 0xcd, 0xde, 0xb0, 0x47, 0xf6, 0x60, 0x4e, 0x21, 0x34, 0x31, 0x01, 0xe4,
-	0x26, 0x13, 0xcf, 0x7d, 0x10, 0x43, 0x99, 0x55, 0x49, 0x63, 0x0f, 0xe6, 0xe4, 0x0e, 0xf5, 0x77,
-	0xd2, 0x54, 0xe2, 0x4e, 0x0a, 0x81, 0xb0, 0xe0, 0x46, 0xfc, 0x25, 0x64, 0xfa, 0x89, 0xd6, 0xe0,
-	0x46, 0xcd, 0xf0, 0x58, 0x6e, 0x4d, 0x01, 0x09, 0x49, 0xe1, 0xc8, 0xaa, 0x49, 0x3a, 0xfb, 0x06,
-	0x37, 0x76, 0xd3, 0x02, 0x68, 0x36, 0x70, 0x70, 0xf4, 0x05, 0xa1, 0x25, 0x94, 0xd4, 0x6c, 0xf2,
-	0x0a, 0xb2, 0xc1, 0xd4, 0xec, 0x83, 0xae, 0xab, 0x25, 0x42, 0xd0, 0x1d, 0x21, 0xbb, 0x10, 0x16,
-	0x69, 0x49, 0x35, 0x85, 0x40, 0xff, 0xa6, 0x41, 0xfa, 0x98, 0xd9, 0x8d, 0x17, 0xcc, 0xe3, 0x3a,
-	0xf3, 0x3a, 0x4e, 0xdb, 0x63, 0xe4, 0x67, 0x30, 0xe9, 0x32, 0xaf, 0x6b, 0x73, 0x95, 0x5e, 0xee,
-	0xf8, 0xee, 0x0f, 0x6a, 0x06, 0x07, 0xba, 0x36, 0xd7, 0xd5, 0x34, 0x5a, 0x81, 0xf9, 0xb0, 0x84,
-	0xcc, 0xc2, 0xd4, 0xf1, 0xc9, 0xde, 0xde, 0xc1, 0xf1, 0x71, 0x7a, 0x44, 0x7c, 0x3c, 0xd9, 0x29,
-	0x3d, 0x3b, 0xd1, 0x0f, 0xd2, 0x1a, 0xc9, 0xc0, 0xdc, 0xf3, 0xf2, 0x8b, 0xea, 0xf1, 0x49, 0xa5,
-	0x52, 0xd6, 0x5f, 0x1c, 0xec, 0xa7, 0x47, 0xc5, 0xd0, 0xc9, 0xf3, 0xa7, 0xcf, 0xcb, 0xaf, 0x9e,
-	0x57, 0x0f, 0x74, 0xbd, 0xac, 0xa7, 0xc7, 0x68, 0x19, 0x32, 0xe5, 0xc6, 0x4e, 0x93, 0xb5, 0xf9,
-	0x71, 0xb7, 0xe6, 0xd5, 0x5d, 0xab, 0xc6, 0x5c, 0x91, 0x4f, 0x9c, 0x86, 0x21, 0x06, 0x7b, 0x27,
-	0x56, 0x9f, 0x51, 0x23, 0x25, 0x53, 0xe4, 0x22, 0x75, 0xbb, 0x59, 0xa6, 0x4a, 0x72, 0xd3, 0x72,
-	0xa0, 0x64, 0xd2, 0xc7, 0x00, 0x47, 0xac, 0x55, 0x63, 0xae, 0x77, 0x6a, 0x75, 0x04, 0x12, 0xee,
-	0x9a, 0x6a, 0xdb, 0x68, 0x31, 0x1f, 0x09, 0x47, 0x9e, 0x1b, 0x2d, 0x91, 0xf1, 0x47, 0x7b, 0x10,
-	0xa3, 0x96, 0x49, 0x0f, 0x20, 0xf5, 0xc4, 0x76, 0xde, 0x1e, 0x31, 0x6e, 0x88, 0xb5, 0x20, 0x1f,
-	0xc3, 0x64, 0x8b, 0x05, 0x32, 0xcf, 0x7a, 0x21, 0x78, 0x15, 0x3b, 0x8d, 0x4e, 0x15, 0xc5, 0x55,
-	0x99, 0xf2, 0x75, 0xa5, 0x7c, 0xff, 0xdb, 0x2d, 0x98, 0x93, 0x07, 0xfb, 0x98, 0xb9, 0x62, 0x91,
-	0xc8, 0x2b, 0x98, 0x3b, 0x64, 0x3c, 0x40, 0x6c, 0xb9, 0x20, 0xcb, 0x95, 0x82, 0x5f, 0xae, 0x14,
-	0x0e, 0x44, 0xb9, 0x92, 0xef, 0x9d, 0x8c, 0xbe, 0x2e, 0xcd, 0x7f, 0xf9, 0xed, 0xbf, 0xbf, 0x1e,
-	0x5d, 0x24, 0x04, 0x2b, 0x9f, 0xb3, 0x7b, 0xc5, 0x56, 0x1f, 0xe7, 0x35, 0xa4, 0x4f, 0x3a, 0xa6,
-	0xc1, 0x59, 0x00, 0x3b, 0x06, 0x23, 0x9f, 0x60, 0x8f, 0xae, 0x23, 0xf6, 0x0a, 0x8d, 0xc1, 0x7e,
-	0xa4, 0x6d, 0x92, 0x7d, 0x98, 0x39, 0x64, 0x5c, 0x25, 0xa9, 0x24, 0xce, 0xbd, 0x3c, 0x20, 0xf5,
-	0xe8, 0x02, 0x62, 0xce, 0x90, 0x29, 0x85, 0x49, 0x5e, 0x43, 0xe6, 0x99, 0xe5, 0xf1, 0x70, 0xa6,
-	0x4c, 0x42, 0x5b, 0x8a, 0x4b, 0x99, 0x1e, 0xbd, 0x86, 0xa0, 0x59, 0x92, 0xf1, 0x89, 0x5a, 0x3d,
-	0xa4, 0x63, 0x58, 0x38, 0x64, 0x21, 0x74, 0x02, 0x05, 0x55, 0xc8, 0x95, 0xf6, 0xf3, 0xb1, 0x39,
-	0x98, 0xbe, 0x87, 0x78, 0x39, 0xb2, 0x1c, 0xc1, 0x2b, 0xbe, 0xb3, 0xcc, 0x2f, 0x88, 0x0e, 0x29,
-	0xc1, 0x79, 0xc7, 0x4f, 0xa4, 0x49, 0x74, 0xd3, 0x03, 0x69, 0xd8, 0xa3, 0x39, 0x44, 0x26, 0x24,
-	0xed, 0x23, 0xf7, 0x92, 0x31, 0x03, 0x22, 0x30, 0x9f, 0x85, 0xf3, 0x6a, 0x12, 0xf2, 0x72, 0x6c,
-	0x86, 0xf6, 0xe8, 0x75, 0xc4, 0xbf, 0x46, 0x56, 0x7c, 0xfc, 0x81, 0x04, 0x4f, 0x7e, 0x0b, 0xe9,
-	0x43, 0x16, 0xb6, 0x12, 0x0a, 0x48, 0x7c, 0xea, 0xa7, 0xb7, 0x10, 0xf7, 0x3d, 0xb2, 0x96, 0x80,
-	0x2b, 0xe3, 0xd2, 0x80, 0xe5, 0x88, 0x0f, 0x15, 0xc7, 0xe5, 0x5e, 0x7c, 0xcc, 0x95, 0x1e, 0x6a,
-	0xd0, 0x4d, 0xb4, 0x70, 0x8b, 0xd0, 0x8b, 0x2c, 0x14, 0x3b, 0x88, 0xf6, 0x39, 0x2c, 0x0e, 0x3a,
-	0x21, 0x40, 0xc8, 0x52, 0x0c, 0x72, 0xc9, 0xcc, 0x67, 0x63, 0x86, 0xe9, 0x03, 0xb4, 0x57, 0x20,
-	0x1f, 0x5d, 0x6e, 0xaf, 0xf8, 0x4e, 0xfc, 0xa9, 0x0a, 0x0f, 0xff, 0xa8, 0xc1, 0xca, 0x01, 0x56,
-	0x3d, 0x57, 0xb6, 0x9e, 0x74, 0xba, 0x1e, 0x23, 0x81, 0x8f, 0xe9, 0xf6, 0x30, 0x04, 0x8a, 0xaa,
-	0xe4, 0xfa, 0x4a, 0x83, 0xdc, 0xbe, 0xe5, 0xfd, 0x20, 0x44, 0x7e, 0x8a, 0x44, 0x1e, 0xd2, 0x07,
-	0x43, 0x11, 0x31, 0xa5, 0x75, 0x62, 0xc6, 0xac, 0xb9, 0xc8, 0x93, 0xe1, 0x35, 0x27, 0xa1, 0xe4,
-	0x88, 0xf2, 0x2b, 0xae, 0x78, 0x03, 0xb1, 0x7e, 0xaf, 0xc1, 0x9a, 0xcc, 0x65, 0x11, 0x43, 0x2f,
-	0x90, 0xc6, 0x5a, 0xc4, 0x00, 0x8e, 0xcb, 0x39, 0x89, 0xae, 0x6f, 0x21, 0x85, 0x3b, 0xf4, 0x0a,
-	0x14, 0x44, 0xc6, 0xfb, 0x83, 0x06, 0xeb, 0x31, 0x2c, 0x8e, 0x44, 0x66, 0x97, 0x34, 0x56, 0x43,
-	0x34, 0x50, 0x70, 0xe4, 0x98, 0x97, 0xb0, 0x28, 0x20, 0x8b, 0x0d, 0xfa, 0xfe, 0x85, 0x2c, 0xe4,
-	0xfd, 0x21, 0x68, 0x34, 0x61, 0x25, 0x12, 0x72, 0x34, 0x15, 0x8e, 0x79, 0x36, 0xca, 0xc5, 0xa3,
-	0x1f, 0xa2, 0xad, 0x0f, 0xc8, 0x55, 0x6c, 0x11, 0x0e, 0xab, 0xb1, 0x6b, 0xab, 0x0a, 0xa7, 0xa0,
-	0xb1, 0x95, 0x48, 0xfc, 0xa5, 0x12, 0xbd, 0x8b, 0x06, 0x37, 0xc9, 0xc6, 0xa5, 0x21, 0x56, 0x35,
-	0x1c, 0xf9, 0x5a, 0x83, 0x9b, 0x09, 0x6b, 0x8d, 0x98, 0x32, 0xd2, 0x37, 0xe3, 0x0d, 0x5e, 0x65,
-	0xd5, 0xb7, 0x91, 0xd2, 0x16, 0xbd, 0x32, 0x25, 0x11, 0xf4, 0x32, 0xcc, 0x8a, 0x58, 0x5c, 0x96,
-	0x98, 0x17, 0xc2, 0xa5, 0xa7, 0x47, 0x57, 0xd0, 0x58, 0x86, 0x2c, 0xf8, 0xc6, 0xfc, 0x4c, 0x5c,
-	0x86, 0xb9, 0x3e, 0x60, 0xc9, 0x4c, 0x86, 0x9c, 0xed, 0x87, 0x39, 0xe6, 0xaa, 0x93, 0x70, 0x96,
-	0xe9, 0x91, 0x13, 0x48, 0xeb, 0xac, 0xee, 0xb4, 0xeb, 0x96, 0xcd, 0x7c, 0x9a, 0xc1, 0xb9, 0x89,
-	0xf1, 0x58, 0x43, 0xcc, 0x65, 0x1a, 0xc5, 0x14, 0x8e, 0x1f, 0xe0, 0x35, 0x1f, 0x73, 0x55, 0x0c,
-	0x94, 0xf8, 0x3e, 0x0c, 0x59, 0x1c, 0xf0, 0x54, 0xde, 0x0d, 0xbf, 0x80, 0xd4, 0x9e, 0xcb, 0x0c,
-	0xae, 0xa8, 0x91, 0x81, 0xd9, 0x11, 0x34, 0x55, 0xd8, 0xd0, 0xc1, 0xb8, 0x09, 0x4a, 0xaf, 0x20,
-	0x25, 0x93, 0x70, 0x0c, 0xab, 0x24, 0x27, 0xdf, 0x47, 0xbc, 0x75, 0xba, 0x1a, 0xc7, 0xce, 0x4f,
-	0xab, 0xbf, 0x86, 0x39, 0x95, 0x55, 0x87, 0x40, 0x56, 0x77, 0x23, 0x5d, 0x8b, 0x45, 0xf6, 0xf3,
-	0xe4, 0x2b, 0x48, 0xe9, 0xac, 0xe6, 0x38, 0xfc, 0x07, 0xe3, 0xec, 0x22, 0x9c, 0x00, 0xde, 0x67,
-	0x36, 0xe3, 0xdf, 0x23, 0x18, 0x9b, 0xf1, 0xc0, 0x26, 0xc2, 0x91, 0x2e, 0xcc, 0xed, 0x3b, 0x6f,
-	0xdb, 0xb6, 0x63, 0x98, 0xa5, 0x96, 0xd1, 0x64, 0xfd, 0x7b, 0x05, 0x3f, 0x7d, 0x59, 0x7e, 0xc9,
-	0x37, 0x58, 0xee, 0x30, 0x17, 0xdb, 0x6e, 0xe2, 0xa9, 0x40, 0x1f, 0xa2, 0x8d, 0xbb, 0xf4, 0xc3,
-	0x58, 0x1b, 0x96, 0x80, 0xa8, 0x9a, 0x0a, 0xc3, 0x2b, 0xbe, 0x13, 0x45, 0xf8, 0x17, 0x62, 0x71,
-	0xbf, 0xd4, 0x60, 0xf9, 0x90, 0xf1, 0x90, 0x0d, 0xf9, 0xc0, 0x4e, 0x26, 0x10, 0x37, 0x4c, 0x1f,
-	0x21, 0x81, 0x07, 0xe4, 0xfe, 0x10, 0x04, 0x8a, 0x9e, 0xb4, 0xd4, 0xc5, 0x32, 0x29, 0x84, 0x37,
-	0xa4, 0x75, 0x95, 0x64, 0xc8, 0x30, 0xee, 0x93, 0x86, 0x2c, 0x02, 0x43, 0x48, 0xde, 0xc0, 0x8a,
-	0xc6, 0x59, 0xf3, 0xe8, 0x47, 0x68, 0xee, 0x36, 0xb9, 0x75, 0x15, 0x73, 0xe4, 0x73, 0xc8, 0xee,
-	0x89, 0x7a, 0xd6, 0xbe, 0xa2, 0x87, 0xb1, 0x0b, 0xac, 0x3c, 0xdc, 0x1c, 0xca, 0xc3, 0x3f, 0x6b,
-	0x90, 0xdd, 0xa9, 0x73, 0xeb, 0xcc, 0xe0, 0x0c, 0xad, 0xc8, 0x5c, 0x3d, 0xa4, 0xe9, 0x3d, 0x34,
-	0xfd, 0x09, 0xfd, 0xf1, 0x30, 0x4b, 0x2b, 0x87, 0xbb, 0x68, 0x4f, 0x6c, 0xb4, 0x3f, 0x69, 0x90,
-	0xd1, 0xd9, 0x19, 0x73, 0xf9, 0xff, 0x85, 0x88, 0x8b, 0xa6, 0x05, 0x91, 0x0a, 0x2c, 0xf4, 0x6f,
-	0x82, 0x68, 0xbd, 0x3c, 0xe7, 0x33, 0x92, 0x85, 0x32, 0x45, 0x93, 0x6b, 0x24, 0x1f, 0x6b, 0x52,
-	0x16, 0xc8, 0xaf, 0x21, 0x1b, 0x40, 0x6c, 0xed, 0xe1, 0x13, 0x34, 0x8c, 0x9a, 0xe9, 0xa1, 0xfa,
-	0x62, 0x7a, 0x07, 0x91, 0x6f, 0x92, 0xeb, 0xf1, 0xc8, 0x2d, 0xf5, 0x94, 0xf5, 0x48, 0x1b, 0x96,
-	0x64, 0xb4, 0x06, 0x0d, 0x44, 0x41, 0x13, 0x53, 0x90, 0xaa, 0xfe, 0xe8, 0x65, 0xc6, 0x44, 0x80,
-	0x4e, 0x82, 0x01, 0xba, 0x5a, 0x71, 0x79, 0x71, 0x94, 0x64, 0x51, 0xc9, 0x60, 0x31, 0x0c, 0x3b,
-	0x4c, 0x5d, 0xb3, 0x81, 0x06, 0x28, 0xb9, 0x91, 0x68, 0xc0, 0xaf, 0x67, 0x3e, 0x0b, 0xb2, 0x97,
-	0x7d, 0xab, 0xa4, 0xab, 0x3e, 0x1b, 0xed, 0x7d, 0x79, 0x49, 0xf7, 0xaa, 0x6c, 0x9a, 0x11, 0x1d,
-	0xbb, 0x07, 0x7d, 0xfd, 0x81, 0xc8, 0x44, 0xf0, 0xe8, 0x4d, 0x84, 0x5b, 0x25, 0xd7, 0xe2, 0xe0,
-	0xe4, 0x5d, 0x5d, 0x85, 0x74, 0x9f, 0xb1, 0x0a, 0x4a, 0x12, 0xe5, 0xc5, 0x98, 0x5e, 0x9b, 0xe7,
-	0xb7, 0x0e, 0xc8, 0xd2, 0x80, 0x11, 0x15, 0x92, 0x27, 0x90, 0x3e, 0xe6, 0x2e, 0x33, 0x5a, 0x15,
-	0xa3, 0xfe, 0x86, 0x71, 0xaf, 0xdc, 0xe5, 0x64, 0x39, 0x14, 0x69, 0x29, 0x28, 0x77, 0x79, 0xe2,
-	0x06, 0x1a, 0xd9, 0xd0, 0xc8, 0x01, 0x96, 0x3c, 0xcc, 0x3a, 0x63, 0x0a, 0xa8, 0xd4, 0xbe, 0xa0,
-	0x77, 0x10, 0xc5, 0x2f, 0xb5, 0xe9, 0xc8, 0x5d, 0x8d, 0x3c, 0x85, 0xac, 0x82, 0xd9, 0x3b, 0x35,
-	0xda, 0x4d, 0x86, 0x1d, 0xbf, 0x64, 0x97, 0x73, 0x21, 0xa4, 0xc0, 0x14, 0x04, 0x3b, 0x81, 0xf9,
-	0xde, 0x82, 0xc8, 0x1f, 0x4f, 0xc2, 0x45, 0x79, 0x34, 0x5c, 0x49, 0x9b, 0x55, 0x45, 0xcb, 0x5f,
-	0x93, 0x8c, 0xac, 0x9f, 0x82, 0x8d, 0xfa, 0xb8, 0x1e, 0x65, 0x3e, 0x6e, 0x90, 0xde, 0x40, 0x13,
-	0x79, 0xda, 0x5b, 0x90, 0x50, 0xcb, 0x53, 0x1c, 0xb2, 0x97, 0xc8, 0x3b, 0x88, 0x1e, 0xfb, 0x68,
-	0x0f, 0xb6, 0xdf, 0xa3, 0xc4, 0x43, 0xa8, 0x92, 0xb8, 0x09, 0x19, 0x99, 0x2c, 0xbe, 0x1f, 0xf1,
-	0x0f, 0xd0, 0xc4, 0xf5, 0xfc, 0x05, 0x26, 0x04, 0x7b, 0x13, 0x32, 0xb2, 0x0a, 0xba, 0xd4, 0x4a,
-	0xd2, 0x7e, 0x52, 0xbe, 0x6c, 0x5e, 0xe4, 0x8b, 0x3a, 0x18, 0xa1, 0x9f, 0x20, 0x2e, 0x3d, 0x18,
-	0xa1, 0x88, 0x45, 0x0e, 0x46, 0xc8, 0x0a, 0x79, 0x86, 0xc5, 0x36, 0x5e, 0x3d, 0x5e, 0x7c, 0xb1,
-	0x2d, 0x65, 0x7e, 0x05, 0x47, 0x56, 0x93, 0x2f, 0x1e, 0x8f, 0xfc, 0x0a, 0xa6, 0xfd, 0x96, 0x6c,
-	0x08, 0x2c, 0x97, 0xd4, 0xdb, 0xa5, 0xb7, 0x11, 0xf6, 0x06, 0x7d, 0x2f, 0x16, 0xd6, 0x63, 0x76,
-	0xa3, 0xca, 0x05, 0xda, 0x4b, 0xac, 0x8f, 0x42, 0x2d, 0xed, 0xc1, 0xb7, 0x67, 0xa4, 0xe7, 0x1d,
-	0xcd, 0x3c, 0xe2, 0x18, 0x09, 0x3d, 0xf5, 0xe8, 0xb4, 0x6a, 0xe4, 0x33, 0x20, 0x87, 0x8c, 0x0f,
-	0x74, 0xb5, 0x07, 0x1a, 0x54, 0x71, 0x8d, 0xef, 0x68, 0x3c, 0xc2, 0xd8, 0xd8, 0x43, 0x27, 0x1e,
-	0xcc, 0x1d, 0x5b, 0xad, 0xae, 0x6d, 0x70, 0x86, 0xf3, 0xc9, 0x5a, 0x2f, 0x10, 0xc1, 0x61, 0x9d,
-	0xfd, 0xae, 0xcb, 0x3c, 0x9e, 0x74, 0xe7, 0x47, 0x9a, 0x06, 0xe1, 0x18, 0x29, 0xa4, 0xaa, 0x40,
-	0x12, 0x3b, 0x73, 0x0f, 0x66, 0x7a, 0xed, 0x6b, 0x72, 0xcd, 0x37, 0x18, 0x69, 0x6c, 0xe7, 0x93,
-	0x45, 0x74, 0x84, 0x1c, 0x01, 0xc8, 0x17, 0x0f, 0x36, 0x78, 0x52, 0xc1, 0x8a, 0x20, 0x71, 0x43,
-	0xab, 0xa7, 0x22, 0x9d, 0x17, 0x1c, 0xfb, 0xb3, 0xd5, 0x63, 0x56, 0xbd, 0x73, 0x86, 0xc0, 0xeb,
-	0xbf, 0xc8, 0xce, 0xee, 0x15, 0x03, 0xd3, 0x1f, 0x69, 0x9b, 0xbb, 0x36, 0x64, 0x1d, 0xb7, 0x89,
-	0x79, 0xb1, 0xee, 0xb8, 0xa6, 0xc2, 0xdb, 0x4d, 0xc9, 0xae, 0x6f, 0x05, 0x7f, 0x68, 0xfe, 0x4d,
-	0xa1, 0x69, 0xf1, 0xd3, 0x6e, 0x4d, 0x44, 0xb5, 0xe8, 0x6b, 0xaa, 0x5f, 0xf3, 0xb7, 0xfc, 0xdf,
-	0xf6, 0xb7, 0x8b, 0x4d, 0x47, 0x8d, 0xfd, 0x63, 0x74, 0xb9, 0xec, 0xe3, 0xbd, 0x0c, 0x36, 0x91,
-	0x2b, 0xa3, 0x95, 0xb1, 0xca, 0x78, 0x65, 0xa2, 0x32, 0x59, 0x99, 0xaa, 0x4c, 0xd7, 0x26, 0x71,
-	0xee, 0xf6, 0x7f, 0x03, 0x00, 0x00, 0xff, 0xff, 0x1e, 0x07, 0xe5, 0x3e, 0x27, 0x20, 0x00, 0x00,
+	// 2488 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x4b, 0x73, 0xdb, 0xc8,
+	0xf1, 0x17, 0xf4, 0x56, 0x8b, 0x92, 0xc8, 0xa1, 0x1e, 0x34, 0x25, 0xf9, 0x31, 0xeb, 0xb5, 0xf5,
+	0xd7, 0xae, 0x49, 0xdb, 0xb2, 0x5d, 0xff, 0xd8, 0xd9, 0xca, 0xea, 0x65, 0x85, 0xb1, 0x65, 0x32,
+	0xa0, 0x65, 0xe7, 0xb1, 0x2e, 0x16, 0x48, 0x0c, 0x29, 0x94, 0x41, 0x82, 0x01, 0x86, 0xf2, 0xaa,
+	0x5c, 0x5b, 0xa9, 0xda, 0x3c, 0x36, 0xf7, 0xbd, 0xe7, 0x94, 0x54, 0xaa, 0xf2, 0x1d, 0xf2, 0x11,
+	0xf6, 0x94, 0x53, 0xae, 0xa9, 0x1c, 0xf2, 0x09, 0xf6, 0x9c, 0x9a, 0x9e, 0x01, 0x09, 0x10, 0x80,
+	0x1e, 0x9b, 0xad, 0xca, 0x49, 0xc2, 0x74, 0xcf, 0xef, 0xd7, 0xd3, 0x3d, 0xd3, 0xd3, 0x68, 0x10,
+	0xf2, 0x27, 0x8e, 0xcd, 0x8f, 0x8d, 0x5a, 0xd7, 0x75, 0xb8, 0xe3, 0x15, 0xe5, 0x53, 0x01, 0x9f,
+	0xc8, 0xa4, 0x7c, 0xca, 0xaf, 0xb5, 0x1c, 0xa7, 0x65, 0xb3, 0xa2, 0xd1, 0xb5, 0x8a, 0x46, 0xa7,
+	0xe3, 0x70, 0x83, 0x5b, 0x4e, 0xc7, 0x93, 0x5a, 0xf9, 0x55, 0x25, 0xc5, 0xa7, 0x7a, 0xaf, 0x59,
+	0x64, 0xed, 0x2e, 0x3f, 0x55, 0xc2, 0x5c, 0x18, 0xbe, 0xcd, 0xb8, 0x02, 0xcf, 0x0f, 0x11, 0x37,
+	0x9c, 0x76, 0xdb, 0xe9, 0xc4, 0xcb, 0x8e, 0x99, 0x61, 0xf3, 0x63, 0x25, 0xa3, 0x61, 0x99, 0xed,
+	0xb4, 0xac, 0x86, 0x61, 0xd7, 0x4c, 0x76, 0x62, 0x35, 0x58, 0xfc, 0xfc, 0x90, 0x6c, 0x35, 0x2c,
+	0x33, 0x4c, 0xa3, 0xcb, 0x99, 0xab, 0x84, 0xd7, 0xc2, 0x42, 0xa7, 0xcb, 0x3a, 0x4d, 0xdb, 0x79,
+	0x57, 0xbb, 0xb7, 0x95, 0xa0, 0xd0, 0x6e, 0x58, 0xb5, 0xb6, 0x55, 0xaf, 0x99, 0x75, 0xa5, 0x70,
+	0x23, 0x46, 0xc1, 0xb0, 0x0d, 0xb7, 0xdd, 0x57, 0xa1, 0x7f, 0xd2, 0x60, 0x76, 0x0f, 0x4d, 0x3a,
+	0x70, 0x9d, 0x5e, 0x97, 0x2c, 0xc1, 0xa8, 0x65, 0xe6, 0xb4, 0xeb, 0xda, 0xc6, 0xcc, 0xce, 0xc4,
+	0xbf, 0xbf, 0xfd, 0x66, 0x5d, 0xd3, 0x47, 0x2d, 0x93, 0x94, 0x60, 0x21, 0xbc, 0x38, 0x2f, 0x37,
+	0x7a, 0x7d, 0x6c, 0x63, 0xf6, 0xfe, 0x52, 0x41, 0x45, 0xe9, 0xb9, 0x14, 0x4b, 0xac, 0x9d, 0x99,
+	0x7f, 0x7e, 0xfb, 0xcd, 0xfa, 0xb8, 0xc0, 0xd2, 0xe7, 0xed, 0xa0, 0xc4, 0x23, 0x5b, 0x30, 0xe5,
+	0x43, 0x8c, 0x21, 0xc4, 0xbc, 0x0f, 0x11, 0x9d, 0xeb, 0x6b, 0xd2, 0x1f, 0x40, 0x2a, 0x60, 0xa5,
+	0x47, 0xfe, 0x0f, 0x26, 0x2c, 0xce, 0xda, 0x5e, 0x4e, 0x43, 0x88, 0x6c, 0x18, 0x02, 0x95, 0x74,
+	0xa9, 0x41, 0xff, 0xa8, 0x01, 0xd9, 0x3f, 0x61, 0x1d, 0xfe, 0xd4, 0xb2, 0x39, 0x73, 0xf5, 0x9e,
+	0xcd, 0x9e, 0xb1, 0x53, 0xfa, 0x95, 0x06, 0xd9, 0xa1, 0xe1, 0x97, 0xa7, 0x5d, 0x46, 0xe6, 0x01,
+	0x9a, 0x38, 0x52, 0x33, 0x6c, 0x3b, 0x3d, 0x42, 0x52, 0x30, 0xdd, 0x30, 0x38, 0x6b, 0x39, 0xee,
+	0x69, 0x5a, 0x23, 0x69, 0x48, 0x79, 0xbd, 0x7a, 0xad, 0x3f, 0x32, 0x4a, 0x08, 0xcc, 0xbf, 0xed,
+	0x5a, 0x35, 0x26, 0xa0, 0x6a, 0xfc, 0xb4, 0xcb, 0xd2, 0x63, 0x64, 0x09, 0x32, 0x0d, 0xa7, 0xd3,
+	0xb4, 0x5a, 0xc1, 0xe1, 0x71, 0x31, 0x2c, 0xd7, 0x13, 0x1c, 0x9e, 0xa0, 0x16, 0x2c, 0x0c, 0x19,
+	0x42, 0x3e, 0x85, 0xb1, 0xb7, 0xec, 0x14, 0xc3, 0x30, 0x7f, 0xbf, 0xe0, 0x2f, 0x2e, 0xba, 0x8a,
+	0x42, 0xcc, 0x0a, 0x74, 0x31, 0x95, 0x2c, 0xc2, 0xc4, 0x89, 0x61, 0xf7, 0x58, 0x6e, 0x54, 0x84,
+	0x52, 0x97, 0x0f, 0xf4, 0x2f, 0x1a, 0xcc, 0x06, 0xa6, 0x24, 0x45, 0x7b, 0x19, 0x26, 0x59, 0xc7,
+	0xa8, 0xdb, 0x72, 0xf6, 0xb4, 0xae, 0x9e, 0xc8, 0x2a, 0xcc, 0xa8, 0x05, 0x58, 0x66, 0x6e, 0x0c,
+	0x81, 0xa7, 0xe5, 0x40, 0xc9, 0x24, 0xeb, 0x00, 0x83, 0x65, 0xe5, 0xc6, 0x51, 0x3a, 0x83, 0x23,
+	0xe8, 0xd7, 0x3b, 0x30, 0xe1, 0xf6, 0x6c, 0xe6, 0xe5, 0x26, 0x30, 0x62, 0x2b, 0x09, 0x8b, 0xd2,
+	0xa5, 0x16, 0xfd, 0x04, 0x52, 0x01, 0x89, 0x47, 0xee, 0xc0, 0x94, 0x0c, 0x4b, 0x24, 0xe4, 0x41,
+	0x00, 0x5f, 0x87, 0xbe, 0x85, 0xd4, 0xae, 0xe3, 0xb2, 0x52, 0xc7, 0xe3, 0x46, 0xa7, 0xc1, 0xc8,
+	0x2d, 0x98, 0xb5, 0xd4, 0xff, 0xb5, 0xe1, 0x15, 0x83, 0x2f, 0x29, 0x99, 0x64, 0x0b, 0x26, 0xe5,
+	0x01, 0xc7, 0x95, 0xcf, 0xde, 0x5f, 0xf4, 0x59, 0x7e, 0x8c, 0xa3, 0x55, 0x6e, 0xf0, 0x9e, 0xb7,
+	0x33, 0x21, 0x76, 0xe8, 0x88, 0xae, 0x54, 0xe9, 0x13, 0x98, 0x0b, 0x92, 0x79, 0x64, 0x33, 0xbc,
+	0x3b, 0xfb, 0x20, 0x41, 0x2d, 0x7f, 0x7b, 0x3e, 0x84, 0x85, 0x72, 0xbb, 0x61, 0xbd, 0x64, 0x1e,
+	0xd7, 0xd9, 0xaf, 0x7a, 0xcc, 0xe3, 0x64, 0x7e, 0x10, 0x15, 0x0c, 0x07, 0x81, 0xf1, 0x5e, 0xcf,
+	0x32, 0x55, 0x28, 0xf1, 0x7f, 0xfa, 0x6b, 0x48, 0xc9, 0x29, 0x5e, 0xd7, 0xe9, 0x78, 0x8c, 0xfc,
+	0x08, 0x26, 0x5d, 0xe6, 0xf5, 0x6c, 0xae, 0x36, 0xcd, 0x6d, 0x9f, 0x33, 0xa8, 0x15, 0x7a, 0xd0,
+	0x51, 0x5d, 0x57, 0xd3, 0x68, 0x01, 0x48, 0x54, 0x4a, 0x66, 0x61, 0xaa, 0x7a, 0xb4, 0xbb, 0xbb,
+	0x5f, 0xad, 0xa6, 0x47, 0xc4, 0xc3, 0xd3, 0xed, 0xd2, 0xf3, 0x23, 0x7d, 0x3f, 0xad, 0xd1, 0x7f,
+	0x8c, 0xc3, 0xe4, 0x2b, 0xa4, 0x20, 0xd7, 0x60, 0xea, 0x84, 0xb9, 0x9e, 0xe5, 0x74, 0xc2, 0x8e,
+	0xf5, 0x47, 0xc9, 0x23, 0x98, 0x56, 0xa9, 0xcd, 0x4f, 0x1b, 0x0b, 0xbe, 0x79, 0xdb, 0x72, 0x3c,
+	0x78, 0xe8, 0xfb, 0xba, 0x71, 0x59, 0x67, 0xec, 0xbf, 0xcf, 0x3a, 0xe3, 0x17, 0xcd, 0x3a, 0xe4,
+	0x53, 0x48, 0xa9, 0xfd, 0x2e, 0xf6, 0xb4, 0xbf, 0x75, 0x49, 0x78, 0xa6, 0xd8, 0xdd, 0xc1, 0xd9,
+	0xb3, 0x66, 0x7f, 0xd8, 0x23, 0xbb, 0x30, 0xa7, 0x10, 0x5a, 0x98, 0xb8, 0x72, 0x93, 0x89, 0xf9,
+	0x2a, 0x88, 0xa1, 0x68, 0x55, 0xb2, 0xdb, 0x85, 0x39, 0x79, 0xb2, 0xfc, 0x13, 0x30, 0x95, 0x78,
+	0x02, 0x42, 0x20, 0x2c, 0x78, 0x80, 0x7e, 0x0a, 0x99, 0xc1, 0x05, 0x61, 0x70, 0xa3, 0x6e, 0x78,
+	0x2c, 0xb7, 0xa6, 0x80, 0x84, 0xa4, 0x70, 0x68, 0xd5, 0xa5, 0x39, 0x7b, 0x06, 0x37, 0x76, 0xd2,
+	0x02, 0x68, 0x36, 0x70, 0xe0, 0xf5, 0x05, 0xa1, 0x25, 0x94, 0xd4, 0x6c, 0xf2, 0x1a, 0xb2, 0xc1,
+	0x2b, 0xc5, 0x07, 0x5d, 0x57, 0x21, 0x42, 0xd0, 0x6d, 0x21, 0x3b, 0x13, 0x16, 0xcd, 0x92, 0x6a,
+	0x0a, 0x81, 0xfe, 0x59, 0x83, 0x74, 0x95, 0xd9, 0xcd, 0x8b, 0xed, 0xf0, 0x61, 0xcd, 0xe0, 0x40,
+	0x70, 0x87, 0x57, 0x60, 0x3e, 0x2c, 0x49, 0xde, 0xdd, 0x24, 0x03, 0x73, 0x2f, 0xca, 0x2f, 0x6b,
+	0xd5, 0xa3, 0x4a, 0xa5, 0xac, 0xbf, 0xdc, 0xdf, 0x4b, 0x8f, 0x8a, 0xa1, 0xa3, 0x17, 0xcf, 0x5e,
+	0x94, 0x5f, 0xbf, 0xa8, 0xed, 0xeb, 0x7a, 0x59, 0x4f, 0x8f, 0xd1, 0x32, 0x64, 0xca, 0xcd, 0xed,
+	0x16, 0xeb, 0xf0, 0x6a, 0xaf, 0xee, 0x35, 0x5c, 0xab, 0xce, 0x5c, 0x91, 0x07, 0x9d, 0xa6, 0x21,
+	0x06, 0xfb, 0x99, 0x46, 0x9f, 0x51, 0x23, 0x25, 0x53, 0xe4, 0x50, 0x75, 0x2b, 0xf7, 0x4f, 0xf4,
+	0xb4, 0x1c, 0x28, 0x99, 0xf4, 0x09, 0xc0, 0x21, 0x6b, 0xd7, 0x99, 0xeb, 0x1d, 0x5b, 0x5d, 0x81,
+	0x84, 0xbb, 0xa6, 0xd6, 0x31, 0xda, 0xcc, 0x47, 0xc2, 0x91, 0x17, 0x46, 0x9b, 0xa9, 0x34, 0x31,
+	0xea, 0xa7, 0x09, 0xba, 0x0f, 0xa9, 0xa7, 0xb6, 0xf3, 0xee, 0x90, 0x71, 0x43, 0xc4, 0x82, 0x3c,
+	0x84, 0xc9, 0x36, 0x0b, 0x64, 0xcc, 0xf5, 0x42, 0xb0, 0x84, 0x70, 0x9a, 0xdd, 0x1a, 0x8a, 0x6b,
+	0xf2, 0xaa, 0xd2, 0x95, 0xf2, 0xfd, 0xbf, 0x15, 0x60, 0x4e, 0x1e, 0xec, 0x2a, 0x73, 0x45, 0x90,
+	0xc8, 0x6b, 0x98, 0x3b, 0x60, 0x3c, 0x60, 0xd8, 0x72, 0x41, 0x96, 0x59, 0x05, 0xbf, 0xcc, 0x2a,
+	0xec, 0x8b, 0x32, 0x2b, 0xdf, 0x3f, 0x19, 0x03, 0x5d, 0x9a, 0xff, 0xf2, 0xef, 0xff, 0xfa, 0x7a,
+	0x74, 0x91, 0x10, 0xac, 0xd8, 0x4e, 0xee, 0x15, 0xdb, 0x03, 0x9c, 0x37, 0x90, 0x3e, 0xea, 0x9a,
+	0x06, 0x67, 0x01, 0xec, 0x18, 0x8c, 0x7c, 0x02, 0x1f, 0x5d, 0x47, 0xec, 0x15, 0x1a, 0x83, 0xfd,
+	0x58, 0xdb, 0x24, 0x7b, 0x30, 0x73, 0xc0, 0xb8, 0x4a, 0x52, 0x49, 0x36, 0xf7, 0xf3, 0x80, 0xd4,
+	0xa3, 0x0b, 0x88, 0x39, 0x43, 0xa6, 0x14, 0x26, 0x79, 0x03, 0x99, 0xe7, 0x96, 0xc7, 0xc3, 0x19,
+	0x3e, 0x09, 0x6d, 0x29, 0x2e, 0xd5, 0x7b, 0xf4, 0x0a, 0x82, 0x66, 0x49, 0xc6, 0x37, 0xd4, 0xea,
+	0x23, 0x55, 0x61, 0xe1, 0x80, 0x85, 0xd0, 0x09, 0x14, 0x54, 0x01, 0x5a, 0xda, 0xcb, 0xc7, 0xde,
+	0x1d, 0xf4, 0x2a, 0xe2, 0xe5, 0xc8, 0x72, 0x04, 0xaf, 0xf8, 0xde, 0x32, 0xbf, 0x20, 0x3a, 0xa4,
+	0x84, 0xcd, 0xdb, 0x7e, 0x22, 0x4d, 0x32, 0x37, 0x3d, 0x94, 0x86, 0x3d, 0x9a, 0x43, 0x64, 0x42,
+	0xd2, 0x3e, 0x72, 0x3f, 0x19, 0x33, 0x20, 0x02, 0xf3, 0x79, 0x38, 0xaf, 0x26, 0x21, 0x2f, 0xc7,
+	0x66, 0x68, 0x8f, 0x5e, 0x43, 0xfc, 0x2b, 0x64, 0xc5, 0xc7, 0x1f, 0x4a, 0xf0, 0xe4, 0x97, 0x90,
+	0x3e, 0x60, 0x61, 0x96, 0x90, 0x43, 0xe2, 0x53, 0x3f, 0xbd, 0x89, 0xb8, 0x57, 0xc9, 0x5a, 0x02,
+	0xae, 0xf4, 0x4b, 0x13, 0x96, 0x23, 0x6b, 0xa8, 0x38, 0x2e, 0xf7, 0xe2, 0x7d, 0xae, 0xf4, 0x50,
+	0x83, 0x6e, 0x22, 0xc3, 0x4d, 0x42, 0xcf, 0x62, 0x28, 0x76, 0x11, 0xed, 0x73, 0x58, 0x1c, 0x5e,
+	0x84, 0x00, 0x21, 0x4b, 0x31, 0xc8, 0x25, 0x33, 0x9f, 0x8d, 0x19, 0xa6, 0x0f, 0x90, 0xaf, 0x40,
+	0x3e, 0x3e, 0x9f, 0xaf, 0xf8, 0x5e, 0xfc, 0xa9, 0x89, 0x15, 0xfe, 0x4e, 0x83, 0x95, 0x7d, 0xac,
+	0xd6, 0x2e, 0xcc, 0x9e, 0x74, 0xba, 0x9e, 0xa0, 0x01, 0x0f, 0xe9, 0xd6, 0x65, 0x0c, 0x28, 0xaa,
+	0x52, 0xf1, 0x2b, 0x0d, 0x72, 0x7b, 0x96, 0xf7, 0xbd, 0x18, 0xf2, 0x43, 0x34, 0xe4, 0x11, 0x7d,
+	0x70, 0x29, 0x43, 0x4c, 0xc9, 0x4e, 0xcc, 0x98, 0x98, 0x8b, 0x3c, 0x19, 0x8e, 0x39, 0x09, 0x25,
+	0x47, 0x94, 0x5f, 0x30, 0xe2, 0x4d, 0xc4, 0xfa, 0x8d, 0x06, 0x6b, 0x32, 0x97, 0x45, 0x88, 0x5e,
+	0xa2, 0x19, 0x6b, 0x11, 0x02, 0x1c, 0x97, 0x73, 0x12, 0x97, 0x7e, 0x07, 0x4d, 0xb8, 0x4d, 0x2f,
+	0x60, 0x82, 0xc8, 0x78, 0xbf, 0xd5, 0x60, 0x3d, 0xc6, 0x8a, 0x43, 0x91, 0xd9, 0xa5, 0x19, 0xab,
+	0x21, 0x33, 0x50, 0x70, 0xe8, 0x98, 0xe7, 0x58, 0x51, 0x40, 0x2b, 0x36, 0xe8, 0x07, 0x67, 0x5a,
+	0x21, 0xef, 0x0f, 0x61, 0x46, 0x0b, 0x56, 0x22, 0x2e, 0x47, 0xaa, 0xb0, 0xcf, 0xb3, 0x51, 0x5b,
+	0x3c, 0xfa, 0x11, 0x72, 0x7d, 0x48, 0x2e, 0xc2, 0x45, 0x38, 0xac, 0xc6, 0xc6, 0x56, 0x15, 0x4e,
+	0x41, 0xb2, 0x95, 0x88, 0xff, 0xa5, 0x12, 0xbd, 0x8b, 0x84, 0x9b, 0x64, 0xe3, 0x5c, 0x17, 0xab,
+	0x1a, 0x8e, 0x7c, 0xad, 0xc1, 0x8d, 0x84, 0x58, 0x23, 0xa6, 0xf4, 0xf4, 0x8d, 0x78, 0xc2, 0x8b,
+	0x44, 0x7d, 0x0b, 0x4d, 0xba, 0x43, 0x2f, 0x6c, 0x92, 0x70, 0x7a, 0x19, 0x66, 0x85, 0x2f, 0xce,
+	0x4b, 0xcc, 0x0b, 0xe1, 0xd2, 0xd3, 0xa3, 0x2b, 0x48, 0x96, 0x21, 0x0b, 0x3e, 0x99, 0x9f, 0x89,
+	0xcb, 0x30, 0x37, 0x00, 0x2c, 0x99, 0xc9, 0x90, 0xb3, 0x03, 0x37, 0xc7, 0x5c, 0x75, 0x12, 0xce,
+	0x32, 0x3d, 0x72, 0x04, 0x69, 0x9d, 0x35, 0x9c, 0x4e, 0xc3, 0xb2, 0x99, 0x6f, 0x66, 0x70, 0x6e,
+	0xa2, 0x3f, 0xd6, 0x10, 0x73, 0x99, 0x46, 0x31, 0xc5, 0xc2, 0xf7, 0xf1, 0x9a, 0x8f, 0xb9, 0x2a,
+	0x86, 0x4a, 0x7c, 0x1f, 0x86, 0x2c, 0x0e, 0xad, 0x54, 0xde, 0x0d, 0x3f, 0x81, 0xd4, 0xae, 0xcb,
+	0x0c, 0xae, 0x4c, 0x23, 0x43, 0xb3, 0x23, 0x68, 0xaa, 0xb0, 0xa1, 0xc3, 0x7e, 0x13, 0x26, 0xbd,
+	0x86, 0x94, 0x4c, 0xc2, 0x31, 0x56, 0x25, 0x2d, 0xf2, 0x03, 0xc4, 0x5b, 0xa7, 0xab, 0x71, 0xd6,
+	0xf9, 0x69, 0xf5, 0xe7, 0x30, 0xa7, 0xb2, 0xea, 0x25, 0x90, 0xd5, 0xdd, 0x48, 0xd7, 0x62, 0x91,
+	0xfd, 0x3c, 0xf9, 0x1a, 0x52, 0x3a, 0xab, 0x3b, 0x0e, 0xff, 0xde, 0x6c, 0x76, 0x11, 0x4e, 0x00,
+	0xef, 0x31, 0x9b, 0xf1, 0xef, 0xe0, 0x8c, 0xcd, 0x78, 0x60, 0x13, 0xe1, 0x48, 0x0f, 0xe6, 0xf6,
+	0x9c, 0x77, 0x1d, 0xdb, 0x31, 0xcc, 0x52, 0xdb, 0x68, 0xb1, 0xc1, 0xbd, 0x82, 0x8f, 0xbe, 0x2c,
+	0xbf, 0xe4, 0x13, 0x96, 0xbb, 0xcc, 0xc5, 0x76, 0xa1, 0x78, 0x55, 0xa0, 0x8f, 0x90, 0xe3, 0x2e,
+	0xfd, 0x28, 0x96, 0xc3, 0x12, 0x10, 0x35, 0x53, 0x61, 0x78, 0xc5, 0xf7, 0xa2, 0x08, 0xff, 0x42,
+	0x04, 0xf7, 0x4b, 0x0d, 0x96, 0x0f, 0x18, 0x0f, 0x71, 0xc8, 0xc6, 0x40, 0xb2, 0x01, 0x71, 0xc3,
+	0xf4, 0x31, 0x1a, 0xf0, 0x80, 0xdc, 0xbf, 0x84, 0x01, 0x45, 0x4f, 0x32, 0xf5, 0xb0, 0x4c, 0x0a,
+	0xe1, 0x5d, 0x92, 0x5d, 0x25, 0x19, 0x72, 0x99, 0xe5, 0x93, 0xa6, 0x2c, 0x02, 0x43, 0x48, 0xde,
+	0x50, 0x44, 0xe3, 0xd8, 0x3c, 0xfa, 0x31, 0xd2, 0xdd, 0x22, 0x37, 0x2f, 0x42, 0x47, 0x3e, 0x87,
+	0xec, 0xae, 0xa8, 0x67, 0xed, 0x0b, 0xae, 0x30, 0x36, 0xc0, 0x6a, 0x85, 0x9b, 0x97, 0x5a, 0xe1,
+	0x1f, 0x34, 0xc8, 0x6e, 0x37, 0xb8, 0x75, 0x62, 0x70, 0x86, 0x2c, 0x32, 0x57, 0x5f, 0x92, 0x7a,
+	0x17, 0xa9, 0x3f, 0xa1, 0xff, 0x7f, 0x99, 0xd0, 0xca, 0xe1, 0x1e, 0xf2, 0x89, 0x8d, 0xf6, 0x7b,
+	0x0d, 0x32, 0x3a, 0x3b, 0x61, 0x2e, 0xff, 0x9f, 0x18, 0xe2, 0x22, 0xb5, 0x30, 0xa4, 0x02, 0x0b,
+	0x83, 0x9b, 0x20, 0x5a, 0x2f, 0xcf, 0xf9, 0x16, 0xc9, 0x42, 0x99, 0x22, 0xe5, 0x1a, 0xc9, 0xc7,
+	0x52, 0xca, 0x02, 0xf9, 0x0d, 0x64, 0x03, 0x88, 0xed, 0x5d, 0x7c, 0x05, 0x0d, 0xa3, 0x66, 0xfa,
+	0xa8, 0xbe, 0x98, 0xde, 0x46, 0xe4, 0x1b, 0xe4, 0x5a, 0x3c, 0x72, 0x5b, 0xbd, 0xca, 0x7a, 0xa4,
+	0x03, 0x4b, 0xd2, 0x5b, 0xc3, 0x04, 0x51, 0xd0, 0xc4, 0x14, 0xa4, 0xaa, 0x3f, 0x7a, 0x1e, 0x99,
+	0x70, 0xd0, 0x51, 0xd0, 0x41, 0x17, 0x2b, 0x2e, 0xcf, 0xf6, 0x92, 0x2c, 0x2a, 0x19, 0x2c, 0x86,
+	0x61, 0x2f, 0x53, 0xd7, 0x6c, 0x20, 0x01, 0x25, 0xd7, 0x13, 0x09, 0xfc, 0x7a, 0xe6, 0xb3, 0xa0,
+	0xf5, 0xb2, 0x6f, 0x95, 0x74, 0xd5, 0x67, 0xa3, 0xbd, 0x2f, 0x2f, 0xe9, 0x5e, 0x95, 0x4d, 0x33,
+	0xa2, 0x63, 0xf7, 0x60, 0xa0, 0x3f, 0xe4, 0x99, 0x08, 0x1e, 0xbd, 0x81, 0x70, 0xab, 0xe4, 0x4a,
+	0x1c, 0x9c, 0xbc, 0xab, 0x6b, 0x90, 0x1e, 0x58, 0xac, 0x9c, 0x92, 0x64, 0xf2, 0x62, 0x4c, 0xaf,
+	0xcd, 0xf3, 0x5b, 0x07, 0x64, 0x69, 0x88, 0x44, 0xb9, 0xe4, 0x29, 0xa4, 0xab, 0xdc, 0x65, 0x46,
+	0xbb, 0x62, 0x34, 0xde, 0x32, 0xee, 0x95, 0x7b, 0x9c, 0x2c, 0x87, 0x3c, 0x2d, 0x05, 0xe5, 0x1e,
+	0x4f, 0xdc, 0x40, 0x23, 0x1b, 0x1a, 0xd9, 0xc7, 0x92, 0x87, 0x59, 0x27, 0x4c, 0x01, 0x95, 0x3a,
+	0x67, 0xf4, 0x0e, 0xa2, 0xf8, 0xa5, 0x0e, 0x1d, 0xb9, 0xab, 0x91, 0x67, 0x90, 0x55, 0x30, 0xbb,
+	0xc7, 0x46, 0xa7, 0xc5, 0xb0, 0xe3, 0x97, 0xbc, 0xe4, 0x5c, 0x08, 0x29, 0x30, 0x05, 0xc1, 0x8e,
+	0x60, 0xbe, 0x1f, 0x10, 0xf9, 0xd1, 0x27, 0x5c, 0x94, 0x47, 0xdd, 0x95, 0xb4, 0x59, 0x95, 0xb7,
+	0xfc, 0x98, 0x64, 0x64, 0xfd, 0x14, 0xfc, 0xc0, 0x10, 0xd7, 0xa3, 0xcc, 0xc7, 0x0d, 0xd2, 0xeb,
+	0x48, 0x91, 0xa7, 0xfd, 0x80, 0x84, 0x5a, 0x9e, 0xe2, 0x90, 0xbd, 0x42, 0xbb, 0x83, 0xe8, 0xb1,
+	0x2f, 0xed, 0xc1, 0xcf, 0x06, 0x51, 0xc3, 0x43, 0xa8, 0xd2, 0x70, 0x13, 0x32, 0x32, 0x59, 0x7c,
+	0x37, 0xc3, 0x3f, 0x44, 0x8a, 0x6b, 0xf9, 0x33, 0x28, 0x84, 0xf5, 0x26, 0x64, 0x64, 0x15, 0x74,
+	0x2e, 0x4b, 0xd2, 0x7e, 0x52, 0x6b, 0xd9, 0x3c, 0x6b, 0x2d, 0xea, 0x60, 0x84, 0x3e, 0x9d, 0x9c,
+	0x7b, 0x30, 0x42, 0x1e, 0x8b, 0x1c, 0x8c, 0x10, 0x0b, 0x79, 0x8e, 0xc5, 0x36, 0x5e, 0x3d, 0x5e,
+	0x7c, 0xb1, 0x2d, 0x65, 0x7e, 0x05, 0x47, 0x56, 0x93, 0x2f, 0x1e, 0x8f, 0xfc, 0x0c, 0xa6, 0xfd,
+	0x96, 0x6c, 0x08, 0x2c, 0x97, 0xd4, 0xdb, 0xa5, 0xb7, 0x10, 0xf6, 0x3a, 0xbd, 0x1a, 0x0b, 0xeb,
+	0x31, 0xbb, 0x59, 0xe3, 0x02, 0xed, 0x15, 0xd6, 0x47, 0xa1, 0x96, 0xf6, 0xf0, 0xbb, 0x67, 0xa4,
+	0xe7, 0x1d, 0xcd, 0x3c, 0xe2, 0x18, 0x09, 0x3d, 0xf5, 0xd2, 0x69, 0xd5, 0xc9, 0x67, 0x40, 0x0e,
+	0x18, 0x1f, 0xea, 0x6a, 0x0f, 0x35, 0xa8, 0xe2, 0x1a, 0xdf, 0x51, 0x7f, 0x84, 0xb1, 0xb1, 0x87,
+	0x4e, 0x3c, 0x98, 0xab, 0x5a, 0xed, 0x9e, 0x6d, 0x70, 0x86, 0xf3, 0xc9, 0x5a, 0xdf, 0x11, 0xc1,
+	0x61, 0xf5, 0xa1, 0x28, 0xe9, 0xce, 0x8f, 0x34, 0x0d, 0xc2, 0x3e, 0x52, 0x48, 0x35, 0x81, 0x24,
+	0x76, 0xe6, 0x2e, 0xcc, 0xf4, 0xdb, 0xd7, 0xe4, 0x8a, 0x4f, 0x18, 0x69, 0x6c, 0xe7, 0x93, 0x45,
+	0x74, 0x84, 0x1c, 0x02, 0xc8, 0x37, 0x1e, 0x6c, 0xf0, 0xa4, 0x82, 0x15, 0x41, 0xe2, 0x86, 0x56,
+	0xaf, 0x8a, 0x74, 0x5e, 0xd8, 0x38, 0x98, 0xad, 0x5e, 0x66, 0xd5, 0x7b, 0xce, 0x25, 0xf0, 0x06,
+	0x6f, 0x64, 0x27, 0xf7, 0x8a, 0x81, 0xe9, 0x02, 0xf0, 0x18, 0xb2, 0x55, 0x6e, 0xb8, 0xdc, 0xff,
+	0xd6, 0x26, 0x4a, 0x3c, 0xa7, 0x43, 0xfa, 0x9f, 0x21, 0x87, 0xbe, 0xc1, 0x0d, 0x0e, 0x47, 0x68,
+	0xf7, 0xa9, 0x23, 0x48, 0xfb, 0xdd, 0x4b, 0x4f, 0x60, 0xd6, 0xf0, 0x2b, 0x88, 0xd8, 0x76, 0x8f,
+	0xb5, 0xcd, 0x1d, 0x1b, 0xb2, 0x8e, 0xdb, 0xc2, 0x0c, 0xdc, 0x70, 0x5c, 0x53, 0xe1, 0xec, 0xa4,
+	0x64, 0x7f, 0xb9, 0x82, 0x9f, 0xe2, 0x7f, 0x51, 0x68, 0x59, 0xfc, 0xb8, 0x57, 0x17, 0xf1, 0x2b,
+	0xfa, 0x9a, 0xea, 0xf7, 0x0e, 0x77, 0xfc, 0x5f, 0x3f, 0x6c, 0x15, 0x5b, 0x8e, 0x1a, 0xfb, 0xeb,
+	0xe8, 0x72, 0xd9, 0xc7, 0x7b, 0x15, 0x6c, 0x57, 0x57, 0x46, 0x2b, 0x63, 0x95, 0xf1, 0xca, 0x44,
+	0x65, 0xb2, 0x32, 0x55, 0x99, 0xae, 0x4f, 0xe2, 0xdc, 0xad, 0xff, 0x04, 0x00, 0x00, 0xff, 0xff,
+	0x68, 0xe5, 0x85, 0x3e, 0x49, 0x21, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
@@ -2281,6 +2401,8 @@
 	Subscribe(ctx context.Context, in *OfAgentSubscriber, opts ...grpc.CallOption) (*OfAgentSubscriber, error)
 	EnablePort(ctx context.Context, in *Port, opts ...grpc.CallOption) (*empty.Empty, error)
 	DisablePort(ctx context.Context, in *Port, opts ...grpc.CallOption) (*empty.Empty, error)
+	// omci start and stop cli implementation
+	StartOmciTestAction(ctx context.Context, in *OmciTestRequest, opts ...grpc.CallOption) (*TestResponse, error)
 }
 
 type volthaServiceClient struct {
@@ -2893,6 +3015,15 @@
 	return out, nil
 }
 
+func (c *volthaServiceClient) StartOmciTestAction(ctx context.Context, in *OmciTestRequest, opts ...grpc.CallOption) (*TestResponse, error) {
+	out := new(TestResponse)
+	err := c.cc.Invoke(ctx, "/voltha.VolthaService/StartOmciTestAction", in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
 // VolthaServiceServer is the server API for VolthaService service.
 type VolthaServiceServer interface {
 	// Get the membership group of a Voltha Core
@@ -3021,6 +3152,8 @@
 	Subscribe(context.Context, *OfAgentSubscriber) (*OfAgentSubscriber, error)
 	EnablePort(context.Context, *Port) (*empty.Empty, error)
 	DisablePort(context.Context, *Port) (*empty.Empty, error)
+	// omci start and stop cli implementation
+	StartOmciTestAction(context.Context, *OmciTestRequest) (*TestResponse, error)
 }
 
 func RegisterVolthaServiceServer(s *grpc.Server, srv VolthaServiceServer) {
@@ -4103,6 +4236,24 @@
 	return interceptor(ctx, in, info, handler)
 }
 
+func _VolthaService_StartOmciTestAction_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(OmciTestRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(VolthaServiceServer).StartOmciTestAction(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: "/voltha.VolthaService/StartOmciTestAction",
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(VolthaServiceServer).StartOmciTestAction(ctx, req.(*OmciTestRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
 var _VolthaService_serviceDesc = grpc.ServiceDesc{
 	ServiceName: "voltha.VolthaService",
 	HandlerType: (*VolthaServiceServer)(nil),
@@ -4331,6 +4482,10 @@
 			MethodName: "DisablePort",
 			Handler:    _VolthaService_DisablePort_Handler,
 		},
+		{
+			MethodName: "StartOmciTestAction",
+			Handler:    _VolthaService_StartOmciTestAction_Handler,
+		},
 	},
 	Streams: []grpc.StreamDesc{
 		{
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 20c4eb0..0b00fb4 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -63,7 +63,7 @@
 github.com/mitchellh/go-homedir
 # github.com/mitchellh/mapstructure v1.1.2
 github.com/mitchellh/mapstructure
-# github.com/opencord/voltha-lib-go/v3 v3.0.23
+# github.com/opencord/voltha-lib-go/v3 v3.1.0
 github.com/opencord/voltha-lib-go/v3/pkg/adapters
 github.com/opencord/voltha-lib-go/v3/pkg/adapters/adapterif
 github.com/opencord/voltha-lib-go/v3/pkg/adapters/common
@@ -78,7 +78,7 @@
 github.com/opencord/voltha-lib-go/v3/pkg/probe
 github.com/opencord/voltha-lib-go/v3/pkg/techprofile
 github.com/opencord/voltha-lib-go/v3/pkg/version
-# github.com/opencord/voltha-protos/v3 v3.2.7
+# github.com/opencord/voltha-protos/v3 v3.2.8
 github.com/opencord/voltha-protos/v3/go/common
 github.com/opencord/voltha-protos/v3/go/inter_container
 github.com/opencord/voltha-protos/v3/go/omci